[英]Create new column that is a count of how many entries in a row satisfy a condition for each row of a data frame in pandas
[英]python pandas - how to create for each row a list of column names with a condition?
我需要将 function 应用到 dataframe 的所有行中
def find_column(x):
a=[]
for column in df.columns:
if (df.loc[x,column] == 1):
a = a + [column]
return a
如果我只插入索引,它就可以工作,例如:
print(find_column(1))
但:
df['new_col'] = df.apply(find_column,axis=1)
没有任何想法? 谢谢!
您可以按每一行进行迭代,因此x
是具有与列名称相同的index
的Series
,因此可以过滤索引匹配的数据并转换为列表:
df = pd.DataFrame({
'A':list('abcdef'),
'B':[4,1,4,5,5,1],
'C':[7,1,9,4,2,3],
'D':[1,1,5,7,1,1],
'E':[5,1,6,9,1,4],
'F':list('aaabbb')
})
def find_column(x):
return x.index[x == 1].tolist()
df['new'] = df.apply(find_column,axis=1)
print (df)
A B C D E F new
0 a 4 7 1 5 a [D]
1 b 1 1 1 1 a [B, C, D, E]
2 c 4 9 5 6 a []
3 d 5 4 7 9 b []
4 e 5 2 1 1 b [D, E]
5 f 1 3 1 4 b [B, D]
另一个想法是使用DataFrame.dot
与掩码DataFrame.eq
相等,然后删除最后一个分隔符并使用Series.str.split
:
df['new'] = df.eq(1).dot(df.columns + ',').str.rstrip(',').str.split(',')
print (df)
A B C D E F new
0 a 4 7 1 5 a [D]
1 b 1 1 1 1 a [B, C, D, E]
2 c 4 9 5 6 a []
3 d 5 4 7 9 b []
4 e 5 2 1 1 b [D, E]
5 f 1 3 1 4 b [B, D]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.