【问题标题】:nlargest() on indexed series doesn't return the result from each index索引系列上的 nlargest() 不返回每个索引的结果
【发布时间】:2020-04-19 17:23:56
【问题描述】:

我有一个包含选举候选人、捐赠者职业和捐赠(收到)金额的数据框。 而且,我正在尝试找出每个候选人收到的前 7 名最大金额。

候选人姓名 = cand_nm 捐助者的职业 = contbr_occupation 收到的金额 = 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”。我认为这是一个索引系列是不是错了?

【问题讨论】:

  • 为了将来参考,最好创建一个示例数据框(作为代码或文本)以进行测试和预期输出。

标签: pandas


【解决方案1】:

您可以使用SeriesGroupBy.nlargestgroup_keys=False 以避免MultiIndex 的重复级别:

s1 = grouped.groupby(level=0, group_keys=False).nlargest(7)

或将Series.sort_valuesGroupBy.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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 2016-07-28
    相关资源
    最近更新 更多