我有一个选举候选人,捐赠者的职业和捐赠(收到)金额的数据框。 而且,我试图找出每位候选人获得的前7大金额。
candidate name = cand_nm donors' occupation = contbr_occupation received amount = contb_receipt_amt
因此,我首先根据候选人的姓名和捐赠者的职业对数据框进行分组,然后使用.sum()将捐赠金额相加
grouped = df.groupby(['cand_nm','contbr_occupation'])['contb_receipt_amt'].sum()
然后,我按如下方式使用nlargest(),但它从整个系列而不是每个组中返回前7个金额。如何计算每个组的前7名捐款金额?
grouped.nlargest(7)
另一个问题是“分组”变量似乎是一个索引序列。但是,当我使用grouped.index
打印其索引时,它不会返回“ cand_nm”或“ contbr_occupation”。我以为这是一个索引系列是错误的吗?
答案 0 :(得分:1)
您可以将SeriesGroupBy.nlargest
与group_keys=False
一起使用,以避免重复MultiIndex
的级别:
s1 = grouped.groupby(level=0, group_keys=False).nlargest(7)
或将Series.sort_values
与GroupBy.head
一起使用:
s1 = grouped.sort_values(ascending=False).groupby(level=0).head(7)
示例:
df = pd.DataFrame({
'contbr_occupation':list('abcdef'),
'cand_nm':list('aaabbb'),
'contb_receipt_amt':[7,8,9,4,2,3]
})
grouped = df.groupby(['cand_nm','contbr_occupation'])['contb_receipt_amt'].sum()
s1 = grouped.sort_values(ascending=False).groupby(level=0).head(2)
print (s1)
cand_nm contbr_occupation
a c 9
b 8
b d 4
f 3
Name: contb_receipt_amt, dtype: int64
s1 = grouped.groupby(level=0, group_keys=False).nlargest(2)
print (s1)
cand_nm contbr_occupation
a c 9
b 8
b d 4
f 3
Name: contb_receipt_amt, dtype: int64
最后DataFrame
添加Series.reset_index
:
df1 = s1.reset_index()
print (df1)
cand_nm contbr_occupation contb_receipt_amt
0 a c 9
1 a b 8
2 b d 4
3 b f 3