首页 > 解决方案 > 分组依据,数据扩展到新列

问题描述

如何在 Python 或 R 中实现以下目标?

按姓氏和名字分组,并将地址和城市移动到分组行上的新列

  姓 名 地址 城市
1 姓名 1 名字 1 地址 11 城市 11
2 姓名 1 姓名 1 地址 12 城市 12
3 姓名 2 姓名 2 地址 21 城市 21
4 姓名 2 名字 2 地址 22 城市 22
5 姓名 2 姓名 2 地址 23 城市 23

至:

  姓 名 地址 城市 地址 城市 地址 城市
1 姓名1 名字1 地址11 城市11 地址12 城市12
2 姓名2 名字2 地址21 城市21 地址22 城市22 地址23 城市23

我不关心重复的列名,它可能看起来像那样或带有额外的地址编号

标签: pythonrpandas

解决方案


在熊猫中:您可以使用groupby.cumcount()辅助assign系列,然后unstack()使用列格式:

final=(df.assign(k=df.groupby(['Surname','Givename']).cumcount())
    .set_index(['Surname','Givename','k']).unstack().sort_index(level=1,axis=1))
final.columns=[f'{a}_{b}' for a,b in final.columns.values]
print(final)

                  Address_0  City_0 Address_1  City_1 Address_2  City_2
Surname Givename                                                       
Name1   Givename1    Addr11  City11    Addr12  City12       NaN     NaN
Name2   Givename2    Addr21  City21    Addr22  City22    Addr23  City23

注意:final=final.reset_index()如果你想要SurnameandGivename作为列而不是索引,你可以做一个。


推荐阅读