从假人到Pandas

ncecgwcz  于 2023-02-28  发布在  其他
关注(0)|答案(2)|浏览(87)

我有一个 Dataframe ,里面有很多虚拟变量,我不想有很多不同的虚拟列,我只想有一列,每行需要包含一个字符串,只有虚拟变量等于1。

index  a   b   c 
0      1   1   1  
1      0   0   1

输出:

index  dummies  
0      ['a','b','c']  
1      ['c']
9lowa7mx

9lowa7mx1#

dummies = df.apply(lambda x: [col for col in df.columns if x[col] == 1], axis=1)
nwsw7zdq

nwsw7zdq2#

您可以堆叠和使用groupby:

df.where(df.eq(1)).stack().reset_index(level=1).groupby(level=0)['level_1'].agg(list)

或:

df.mul(df.columns).where(lambda x: x.ne('')).stack().groupby(level=0).agg(list)

或:

df.dot(df.columns + ',').str.rstrip(',').str.split(',')

输出:

0    [a, b, c]
1          [c]
Name: level_1, dtype: object

相关问题