如何在 Pandas 数据框中将相同类别的列合并为单个表头?

3

我对pandas不熟悉,难以理解,希望能得到帮助。请问有什么方法可以帮助我解决这个问题吗?

我有一个如下格式的源数据框架 enter image description here

这里分享生成源数据框架的代码:

df = pd.DataFrame({"Employee ID":[1, 2, 3, 4, 5], "Name":["A", "B", "C", "D", "E"],
               "Departments":["hr", "hr, manager", "manager", "developer", "tester, manager, developer"],
               "Groups":["group-1", "group-2, group-3", "", "", "group-1"]})

打印df:

enter image description here

我想将它转换为以下格式: expected output

我尝试使用数据透视表和其他stackover flow示例,但并没有什么帮助,请问有人能够帮我理解并解决这个问题吗?

提前感谢:)


2
也许可以使用简单的文本输入数据和期望输出来创建 [reprex]?图片并不是很好。 - Sergey Bushmanov
1个回答

3
您可以使用自定义函数与Series.str.get_dummies一起使用,然后如果需要将值替换为列名,请添加numpy.where,但首先通过DataFrame.set_index将不处理的列转换为MultiIndex
def f(x):
    m = x.str.get_dummies(', ').astype(bool)
    a = np.where(m, m.columns, '')
    return pd.DataFrame(a, columns=m.columns, index=x.index)

df1 = df.set_index(['Employee ID','Name'])

df = pd.concat([f(df1[x]) for x in df1.columns], axis=1, keys=df1.columns)
print (df)
                 Departments                        Groups                  
                   developer  hr  manager  tester  group-1  group-2  group-3
Employee ID Name                                                            
1           A                 hr                   group-1                  
2           B                 hr  manager                   group-2  group-3
3           C                     manager                                   
4           D      developer                                                
5           E      developer      manager  tester  group-1                  

1
嗨,@jezrael非常感谢您的清晰解释 :) 它按预期工作了!! - vamsi chunduru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接