【问题标题】:python pivot table/group by - i need to know top 3 grouppython数据透视表/分组-我需要知道前3组
【发布时间】:2018-11-22 06:13:07
【问题描述】:
import pandas as pd

df = pd.DataFrame({
       'customer': [1,2,1,3,1,2,3],
       "group_code": ['111', '111', '222', '111', '111', '111', '333'],
       "ind_code": ['A', 'B', 'AA', 'A', 'AAA', 'C', 'BBB'],
       "amount": [100, 200, 140, 400, 225, 125, 600],
       "card": ['XXX', 'YYY', 'YYY', 'XXX', 'XXX', 'YYY', 'XXX']})

有了上面的数据框,我想要的输出如下:

对于每个card number,我想要以下记录:

Card number, % of Amount spent of Group code 1, % of Amount spent on Group code 2, ....so on不同的组代码

% of Amount spent on any group = (Total amount spend on the card / Amount spend on that group ) * 100

另外,在更大的图片中,我想知道每张卡消费金额的前 5 个组?

基本上是2个查询,如果有人可以帮助我,那就太好了。

注意:给出的代码只是为了了解我的数据框的样子。

【问题讨论】:

    标签: python pivot-table pandas-groupby


    【解决方案1】:

    关于第一个查询:首先我们得到每张卡的总消费金额:

    card_totals = df.groupby('card').sum()['amount'].reset_index().to_dict(orient='list')
    card_totals_dict = dict(zip(card_totals['card'], card_totals['amount']))
    card_totals_dict
    

    输出:

    {'XXX': 1325, 'YYY': 465}
    

    然后我们计算每组的百分比:

    group_percentage = df.groupby(['card', 'group_code']).sum()['amount'].reset_index()
    group_percentage['percentage'] = group_percentage['amount'] * 100 / group_percentage['card'].apply(card_totals_dict.get)
    group_percentage
    

    输出:

    card group_code  amount  percentage
    0  XXX        111     725    54.7170
    1  XXX        333     600    45.2830
    2  YYY        111     325    69.8925
    3  YYY        222     140    30.1075
    

    关于第二个查询,听起来和this question很像,所以我想说:

    df.groupby(['card', 'group_code']).agg({'amount': sum})['amount'].groupby(level=0, group_keys=False).nlargest(5)
    

    使用nlargest(1) 返回

    card  group_code
    XXX   111           725
    YYY   111           325
    Name: amount, dtype: int64
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      • 2022-12-14
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      相关资源
      最近更新 更多