pandas 将列添加到DataFrame中,该列包含基于给定条件的列名列表

qybjjes1  于 2023-05-21  发布在  其他
关注(0)|答案(4)|浏览(153)

基本上我有一个Pandas DataFrame,看起来像这样:

| A | B | C | D |
| 2 | 4 | 1 | 7 |
| 2 | 5 | 6 | 7 |
| 3 | 6 | 2 | 7 |

我需要添加一个额外的列E,其中包含符合条件的列的列表。例如>=3。在这种情况下,它看起来应该是这样的:

| A | B | C | D | E         |
| 2 | 4 | 1 | 7 | [B, D]    |
| 2 | 5 | 6 | 7 | [B, C, D] |
| 3 | 6 | 2 | 7 | [A, B, D] |

我试过用1列创建一个全新的 Dataframe ,然后将两列连接起来。但没有成功。还尝试使用np.where,但DataFrame的列太多,无法有效地执行此操作。

7vux5j2d

7vux5j2d1#

可能的解决方案:

df.assign(E = df.apply(lambda x: df.columns[x.ge(3)].to_list(), axis=1))

输出:

A  B  C  D          E
0  2  4  1  7     [B, D]
1  2  5  6  7  [B, C, D]
2  3  6  2  7  [A, B, D]
suzh9iv8

suzh9iv82#

使用dot

df["E"] = df.ge(3).dot(df.columns+",").str.rstrip(",")

>>> df
   A  B  C  D      E
0  2  4  1  7    B,D
1  2  5  6  7  B,C,D
2  3  6  2  7  A,B,D

编辑:要获得list

df["E"] = df.ge(3).dot(df.columns+",").str.rstrip(",").str.split(",")
6rqinv9w

6rqinv9w3#

答案如下:

import pandas as pd 
df = pd.DataFrame({"A": [2, 2, 3],
                   "B": [4, 5, 6],
                   "C": [1, 6, 2],
                   "D": [7]*3})

def my_func(data_, threshold=3):
    for index in data_.index:
        check = data_.loc[index].to_dict()
        data_.loc[index, "E"] = str([key for key, value in check.items() if value >= threshold])
    return data_
my_func(df)
blpfk2vs

blpfk2vs4#

stackgroupby.agg使用整形:

df['E'] = (
 df.stack().ge(3).loc[lambda x: x].reset_index(level=1)
   .groupby(level=0)['level_1'].agg(list)
)

输出:

A  B  C  D          E
0  2  4  1  7     [B, D]
1  2  5  6  7  [B, C, D]
2  3  6  2  7  [A, B, D]

相关问题