如何在groupby中求和nlargest()整数

时间:2016-11-09 22:53:14

标签: python pandas dataframe group-by

我有一个这样的数据框:

    Index STNAME COUNTY COUNTY_POP
      0     AL     0       100
      1     AL     1       150
      2     AL     3       200
      3     AL     5       50
    ...
     15     CA     0       300
     16     CA     1       200
     17     CA     3       250
     18     CA     4       350

我想对每个州的COUNTY_POP中的三个最大整数求和。到目前为止,我有:

    In[]: df.groupby(['STNAME'])['COUNTY_POP'].nlargest(3)
    Out[]:
    Index STNAME COUNTY COUNTY_POP
      0     AL     0       100
      1     AL     1       150
      2     AL     3       200
    ...
     15     CA     0       300
     17     CA     3       250
     18     CA     4       350

但是当我将.sum()操作添加到上面的代码时,我会收到以下输出。

    In[]: df.groupby(['STNAME'])['COUNTY_POP'].nlargest(3).sum()
    Out[]:
    1350

我对Python和Pandas比较陌生。如果有人能够解释导致这种情况的原因以及如何纠正它,我真的很感激!

2 个答案:

答案 0 :(得分:6)

这就是你想要的吗?

In [25]: df.groupby('STNAME')['COUNTY_POP'].agg(lambda x: x.nlargest(3).sum())
Out[25]:
STNAME
AL    450
CA    900
Name: COUNTY_POP, dtype: int64

答案 1 :(得分:2)

预告和切片......快一点

df.sort_values('COUNTY_POP').groupby('STNAME').COUNTY_POP \
    .apply(lambda x: x.values[-3:].sum())

STNAME
AL    450
CA    900
Name: COUNTY_POP, dtype: int64