python - 遍历 pandas 中的组以提取顶部

标签 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             -

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

希望你能帮帮我,谢谢。

最佳答案

第一次使用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/

相关文章:

r - 如何将单列长数据框转换为单行宽数据框?

python / Pandas : Using built-in functions as arguments in user-defined function

python - 值错误: need more than 2 values to unpack - When reading GRAYSCALE

python - Kivy中为什么会出现解析异常?

python - 使用多个变量/输入查询数据框列

python - 将列作为副本添加到 Pandas DataFrame

python - Pandas : Group by and count based on specific value

python - 如何在Python中通过数字的最长重复来分割序列?

python - 在 tkinter 中显示来自 url 的图像

python - 用股票报价识别 Pandas 数据框中的价格波动/趋势