python - 熊猫数据框争吵 - Python
问题描述
我有一个dataframe
如下:
ID Emp1 Emp2 Emp3
1 John NaN Alex
2 John Steve Alex
3 John Steve Alex
4 Clint Jorge NaN
我想将上面的数据框转换成这样的:
John Emp1 [1,2,3]
Clint Emp1 [4]
Steve Emp2 [2,3]
Jorge Emp2 [4]
Alex Emp3 [1,2]
因此,基本上对于每一列(Emp1、Emp2、Emp3),找到“唯一”值(删除 NaN)并为每个唯一值获取“ID”和“列名”
解决方案
您需要将melt
数据转换为长格式。然后你需要执行一个 groupby 聚合来压缩你的“name”和“Emp”数据:
new_df = (df
.melt(id_vars="ID", var_name="emp", value_name="name")
.dropna()
.groupby(["name", "emp"], as_index=False)
.agg(list)
.sort_values(["emp", "name"], ascending=[True, False])
)
print(new_df)
name emp ID
1 Clint Emp1 [4]
2 John Emp1 [1, 2, 3]
3 Jorge Emp2 [4]
4 Steve Emp2 [2, 3]
0 Alex Emp3 [1, 2, 3]