我有一个具有以下结构的数据框:

ID | Name | Role
1 | John | Owner
1 | Bob | Driver
2 | Jake | Owner
2 | Tom | Driver
2 | Sally | Owner
3 | Mary | Owner
3 | Sue | Driver


我想透视“角色”列,并将“名称”列作为值,但是由于某些ID(在这种情况下为索引)在所有者角色中拥有多个人,而某些ID不起作用,pivot_table函数不起作用。是否可以为特定ID可能拥有的每个其他所有者创建一个新列。有些可能拥有2,3,4+个所有者。谢谢!

示例输出如下:

ID | Owner_1 | Owner_2 | Driver
1 | John | NaN | Bob
2 | Jake | Sally | Tom
3 | Mary | NaN | Sue


这是我尝试的:

pd.pivot_table(df,values='Name',index='ID',columns='Role')

DataError: No numeric types to aggregate

最佳答案

您可以使用cumcount为每个ID中的重复项创建附加键,然后我们可以简单地使用pivot

df.Role=df.Role+'_'+df.groupby(['ID','Role']).cumcount().add(1).astype(str)
df.pivot('ID','Role','Name')
Out[432]:
Role Driver_1 Owner_1 Owner_2
ID
1         Bob    John    None
2         Tom    Jake   Sally
3         Sue    Mary    None

关于python - 根据 Pandas 中唯一行值的数量添加新列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50845807/

10-16 01:00
查看更多