1 回答
TA贡献1776条经验 获得超12个赞
好像你可以idxmax在这里使用:
df.set_index('cnum').idxmax(axis=1).reset_index(drop=True)
0 sup1
1 sup1
2 sup3
3 sup2
dtype: object
df['output'] = df.set_index('cnum').idxmax(axis=1).reset_index(drop=True)
# Slightly faster,
# df['output'] = df.set_index('cnum').idxmax(axis=1).to_numpy()
df
cnum sup1 sup2 sup3 sup4 output
0 285414459 1 0 1 1 sup1
1 445633709 1 0 0 0 sup1
2 556714736 0 0 1 0 sup3
3 1089852074 0 1 0 1 sup2
另一个选项dot(将为您提供所有非零列):
d = df.set_index('cnum')
d.dot(d.columns + ',').str.rstrip(',').reset_index(drop=True)
0 sup1,sup3,sup4
1 sup1
2 sup3
3 sup2,sup4
dtype: object
要么,
(d.dot(d.columns + ',')
.str.rstrip(',')
.str.split(',', 1).str[0]
.reset_index(drop=True))
0 sup1
1 sup1
2 sup3
3 sup2
dtype: object
添加回答
举报