首页 > 解决方案 > 熊猫数据框争吵 - 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”和“列名”

标签: pythonpandasdataframe

解决方案


您需要将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]

推荐阅读