numpy 提取包含特定值pandas的列名行

zpqajqem  于 2023-10-19  发布在  其他
关注(0)|答案(2)|浏览(108)

我想得到列名称行明智的价值是不是“做”。

A  B  C  D

1 Do  1 All Do

2  5  2 NA Do

3 1  3 NA NA

4 Do  Do  Do  Do

输出量:

A  B  C  D Column_names

1 Do  1 All Do A, D

2  5  2 NA Do D

3 1  3 NA NA np.nan

4 Do  Do  Do  Do A, B, C, D

这只是一个例子,行数可以超过1000。我想要一个非常有效的方法,不能使用申请,因为这将需要很长时间。(列和行是动态的,这意味着列可以是10,行可以是1000)。

w8ntj3qf

w8ntj3qf1#

使用矩阵乘积和字符串连接:

df["Column Names"] = df.eq('Do').dot(df.columns).str.join(', ')
A   B    C    D Column Names
0  Do   1  All   Do         A, D
1   5   2  NaN   Do            D
2   1   3  NaN  NaN             
3  Do  Do   Do   Do   A, B, C, D
bybem2ql

bybem2ql2#

如果你不想使用apply,你可以使用@操作符(但我更喜欢.apply版本):

c = df.columns + "|"  # I'm supposing column names don't contain `|` character

df["Column Names"] = (
    ((df == "Do") @ c).str.split("|").str[:-1].str.join(", ").replace("", np.nan)
)

print(df)

图纸:

A   B    C    D Column Names
0  Do   1  All   Do         A, D
1   5   2  NaN   Do            D
2   1   3  NaN  NaN          NaN
3  Do  Do   Do   Do   A, B, C, D

编辑:
关于rame:

Name1 Name2 Name3 Name4
1    Do     1   All    Do
2     5     2   NaN    Do
3     1     3   NaN   NaN
4    Do    Do    Do    Do

跑步:

c = df.columns + "|"  # I'm supposing column names don't contain `|` character

df["Column Names"] = (
    ((df == "Do") @ c).str.split("|").str[:-1].str.join(", ").replace("", np.nan)
)

print(df)

我得到:

Name1 Name2 Name3 Name4                Column Names
1    Do     1   All    Do                Name1, Name4
2     5     2   NaN    Do                       Name4
3     1     3   NaN   NaN                         NaN
4    Do    Do    Do    Do  Name1, Name2, Name3, Name4

相关问题