如何将“剩余”结果与大Pandas一起分组到“其他”中

2024-10-04 01:27:20 发布

您现在位置:Python中文网/ 问答频道 /正文

当一组pandas数据帧按一列显示“version”,其中有10个不同的版本。如何才能绘制出前3名(占90%以上)并将剩余的小部分放入一个“另一个”桶中。在

data = array([
              ('Top1', 14),
              ('Top1', 3),
              ('Top1', 2),
              ('Top2', 6),
              ('Top2', 7),
              ('Other1', 1),
              ('Other2', 2),
         ], 
      dtype=[('Version', 'S10'),('Value', '<i4')])
df = DataFrame.from_records(data)
df.groupby('Version').sum()

这将返回:

^{pr2}$

我在找

Value
Version 
Others   
Top1     19
Top2     13

本例只选择了版本名Other*和Top*。在

当然,在分组并与阈值进行比较后,可以手动将类别设置为“其他”。我想找条捷径。在


Tags: 数据版本pandasdfdatavalueversion绘制
1条回答
网友
1楼 · 发布于 2024-10-04 01:27:20

我假设您还希望对Other组求和,对于您的示例,总共是3个?在

如果我的目标是赢得熊猫一号线比赛,这将是我的参赛作品:

df.replace(df.groupby('Version').sum().sort('Value', ascending=False).index[2:], 'Other').groupby('Version').sum()

         Value
Version       
Other        3
Top1        19
Top2        13

但这完全是不可读的,让我们把它分解一下:

您已经演示了如何对每个组求和,对结果进行排序并选择前2名之外的任何内容都可以使用:

^{pr2}$

在本例中,not_top2包含Other1和{}。在

我们可以将这些Versions替换为一个通用名称:

dfnew  = df.replace(not_top2, 'Other')
print dfnew

  Version  Value
0    Top1     14
1    Top1      3
2    Top1      2
3    Top2      6
4    Top2      7
5   Other      1
6   Other      2

上面的内容将替换任何列中not_top2的内容。如果希望此值出现在Version以外的任何列中,则需要一个小的子步骤。在

剩下的就是重新进行原始分组:

dfnew.groupby('Version').sum()

它给出了:

         Value
Version       
Other        3
Top1        19
Top2        13

相关问题 更多 >