遍历大熊猫中的组以提取顶部

时间:2020-05-01 10:57:58

标签: python pandas dataframe

我有一个这样的数据框

df = pd.DataFrame({'Client': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'],
               'Project': ['P1', 'P2', 'P3', 'P4', 'P2', 'P3', 'P1', 'P2', 'P4'],
               'Freq': [5, 2, 3, 4, 6, 9, 7, 2, 4]})

  Client Project  Freq
0      A      P1     5
1      A      P2     2
2      A      P3     3
3      A      P4     4
4      B      P2     6
5      B      P3     9
6      B      P1     7
7      C      P2     2
8      C      P4     4

我想实现这一目标:

  Client Project Top 1 Project Top 2 Project Top 3
0      A            P1            P4            P3
1      B            P3            P1            P2
2      C            P4            P2             -

但是我不知道如何操作和提取组中每个顶级项目。

希望您能帮助我,谢谢。

1 个答案:

答案 0 :(得分:2)

首先在两列中依次使用DataFrame.sort_values,降序为Freq。然后按GroupBy.cumcount创建计数器,按最高值过滤并按Series.unstack重塑形状:

N = 3 
df = df.sort_values(['Client','Freq'], ascending=[True, False])
g = df.groupby('Client').cumcount().add(1)
mask = g <= N
df = (df[mask].set_index(['Client',g[mask]])['Project']
              .unstack()
              .add_prefix('Project Top ')
              .reset_index())
print (df)
  Client Project Top 1 Project Top 2 Project Top 3
0      A            P1            P4            P3
1      B            P3            P1            P2
2      C            P4            P2           NaN
相关问题