我有一个这样的数据框:
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比较陌生。如果有人能够解释导致这种情况的原因以及如何纠正它,我真的很感激!
答案 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