如何在Pandas中实现这种连接?

kknvjkwl  于 2023-01-19  发布在  其他
关注(0)|答案(1)|浏览(110)

我有一个 Dataframe df:-
| 托盘|袋|球|
| - ------|- ------|- ------|
| 无|1个|1个|
| 无|1个|无|
| 1个|1个|无|
| 无|无|1个|
| 无|无|无|
我想在 Dataframe df中添加一列Presence,用逗号分隔,如下所示:-
| 托盘|袋|球|存在|
| - ------|- ------|- ------|- ------|
| 无|1个|1个|袋,球|
| 无|1个|无|袋|
| 1个|1个|无|托盘,袋|
| 无|无|1个|球|
| 无|无|无|不存在|

hpcdzsge

hpcdzsge1#

使用带掩码的DataFrame.dot-按带有列名和分隔符的1比较列,最后替换空字符串:

df['Presence'] = df.eq(1).dot(df.columns + ',').str[:-1].replace('','No Presence')
print (df)
   tray  bag  ball     Presence
0     0    1     1     bag,ball
1     0    1     0          bag
2     1    1     0     tray,bag
3     0    0     0  No Presence

编辑:如果_之前的值使用Series.str.extract,则添加expand=False以避免一列DataFrame

print (df)
   tray_col  bag  ball
0         0    1     1
1         0    1     0
2         1    1     0
3         0    0     0

df['Presence'] = (df.eq(1)
                    .dot(df.columns.str.extract(r'^([^_]+)', expand=False) + ',')
                    .str[:-1].replace('','No Presence'))
print (df)
   tray_col  bag  ball     Presence
0         0    1     1     bag,ball
1         0    1     0          bag
2         1    1     0     tray,bag
3         0    0     0  No Presence

相关问题