假设我有一个Pandas的框架,
id,date,school,name
1,2019-01-01,U,Doug
1,2021-01-01,U,Chris
1,2022-01-01,U,Chris
1,2023-01-01,U,Chris
1,2022-01-01,K,Liam
3,2024-01-01,M,Nancy
3,2024-01-01,M,Betty
我如何将它转换成一种格式,
id,school,name1,name2
1,U,Doug,Chris
1,K,Liam,''
3,M,Nancy,Betty
我想按ID和学校分组,并为每个唯一的名称创建新列。
下面是开始的代码。
import pandas as pd
d = {
'id': [1,1,1,1,2,3,3],
'date': ['2019-01-01', '2021-01-01', '2022-01-01', '2023-01-01', '2022-01-01', '2024-01-01', '2024-01-01'],
'school': ['U','U','U','U','K','M','M'],
'name': ['Doug','Chris','Chris','Chris','Liam','Nancy','Betty']
}
df = pd.DataFrame(d)
2条答案
按热度按时间ffscu2ro1#
您可以使用此代码来获得ID和学校的唯一名称。然后将每行列表中的每个元素移动到单独的列中,最后重命名列。
df_grouped = df.groupby(['id', 'school'])['name'].unique().apply(pd.Series) df_grouped = df_grouped.rename(columns={x: f"name{x+1}" for x in df_grouped.columns}) df_grouped
输出量:
| ID|学校|name1| name2|
| --|--|--|--|
| 1 |U|道格|克里斯|
| 2 |K|利亚姆|楠|
| 3 |M|南希|贝蒂|
请注意,我们的输出并不完全匹配,因为在您的代码和您提供的示例之间,学校K的id有轻微的不匹配。
yks3o0rb2#
可能的解决方案:
输出量: