2 回答
TA贡献1853条经验 获得超18个赞
使用DataFrame.dot
+Series.str.rstrip
和Series.replace
:
cols = pd.Index(['A', 'B', 'C'])
df['E'] = df[cols].dot(cols + ',').str.rstrip(',').replace('', np.nan)
结果:
# print(df)
A B C D E
0 True True True True A,B,C
1 True False True True A,C
2 False False False False NaN
3 False False True True C
TA贡献1842条经验 获得超12个赞
另一种方法是使用stack
s = df[cols].stack()
df['F'] = s[s.eq(True)].reset_index(1).groupby(level=0)['level_1'].agg(','.join)
print(df)
A B C D E F
0 True True True True A,B,C A,B,C
1 True False True True A,C A,C
2 False False False False NaN NaN
3 False False True True C C
添加回答
举报