我有这样一个数据框
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 -
但我不知道如何在组中操作和提取每个顶级项目。
希望你能帮帮我,谢谢。
最佳答案
第一次使用DataFrame.sort_values
按两列,按 Freq
降序。然后通过 GroupBy.cumcount
创建计数器, 按最高值过滤并按 Series.unstack
reshape :
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
关于python - 遍历 pandas 中的组以提取顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61541141/