Mat*_*a C 3 python dataframe pandas
我有一个创建如下的熊猫数据框:
df = pd.DataFrame({
'rank': ['1', '1', '1', '1', '2', '2'],
'name': ['bob', 'rick', 'bob', 'rick', 'randy', 'billy'],
'position': ['sanitation', 'washer', 'sanitation', 'washer', 'sanitation', 'washer']
})
Run Code Online (Sandbox Code Playgroud)
这会产生一个如下所示的数据框:

我希望能够操作数据框,使其最终看起来像这样:

本质上,一旦所有职位都用完,我希望重复的排名出现在新行上。
当我尝试这个时:
pivot = df.pivot_table(values='name', index='rank', columns='position')
Run Code Online (Sandbox Code Playgroud)
我收到错误“DataError:没有要聚合的数字类型”。
无论如何,我不确定这是否可行,因为我选择“排名”作为索引,而我真的不想对排名进行索引。一旦职位列表用完,我希望在新行中重复排名。
有任何想法吗?谢谢!
您可以分配相对排名,groupby().cumcount()然后使用pivot_table:
df['idx'] = df.groupby(['rank', 'position']).cumcount()
(df.pivot_table(index=['rank','idx'], columns='position',
values='name', aggfunc='first')
.reset_index('idx', drop=True) # remove the extra `idx`
.reset_index() # make rank a column
)
Run Code Online (Sandbox Code Playgroud)
输出:
position rank sanitation washer
0 1 bob rick
1 1 bob rick
2 2 randy billy
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |