如何使用重复键在 Pandas 中旋转此数据框?

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:没有要聚合的数字类型”。

无论如何,我不确定这是否可行,因为我选择“排名”作为索引,而我真的不想对排名进行索引。一旦职位列表用完,我希望在新行中重复排名。

有任何想法吗?谢谢!

Qua*_*ang 7

您可以分配相对排名,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)