Pandas:如何在每个子组中找到2个最大的和?

vc9ivgsu  于 2023-05-05  发布在  其他
关注(0)|答案(1)|浏览(112)

我有一个数据框,其中有A、B和C列。我想在A上分组,然后在B上分组,同时取C的和。然后,我想返回每组A的2个最高和。
一个例子看起来像这样。

data = {'State': ['NY', 'NY', 'NY', 'NY', 'CA', 'CA', 'CA', 'CA'],
        'City': ['New York', 'Buffalo', 'New York', 'Albany', 'SF', 'LA', 'SF', 'SD'],
        'Value': [25, 30, 35, 40, 10, 15, 20, 10],}

结果:

国家城市价值总和
纽约州纽约州六十
纽约州奥尔巴尼四十
CASF三十
CALA10个

我试过

summed = df.groupby(['A','B'])['C'].sum() 
grouped = summed.groupby('A').nlargest(2)

这给出了正确的结果,但它有一个A作为来自double groupby()的double索引。有没有一个更干净的方法来得到这个结果,而不必有这个双重索引?

f4t66c6m

f4t66c6m1#

删除多索引的级别,然后重置索引:

import pandas as pd

data = {'State': ['NY', 'NY','NY', 'NY', 'CA', 'CA', 'CA', 'CA'],
        'City': ['New York', 'Buffalo', 'New York', 'Albany', 'SF', 'LA', 'SF', 'SD'],
         'Value': [25, 30, 35, 40, 10, 15, 20, 10]}

df = pd.DataFrame(data)

summed = df.groupby(['State','City'])['Value'].sum()
grouped = summed.groupby('State').nlargest(2)

new_index = grouped.index.droplevel()

result = pd.DataFrame(grouped).set_index(new_index).reset_index()
result

# yields
  State      City  Value
0    CA        SF     30
1    CA        LA     15
2    NY  New York     60
3    NY    Albany     40

相关问题