python数据透视表/分组依据-我需要知道前3组

时间:2018-11-22 06:13:08

标签: python pivot-table pandas-groupby

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等。。。。以此类推

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

而且,从更大的角度看,我想知道每张卡的前5位消费额度是多少?

基本上是2个查询,如果有人可以帮助我,那将是很棒的。

注意:给出的代码仅用于了解我的数据框的外观。

1 个答案:

答案 0 :(得分:0)

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

{'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

输出:

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

关于第二个查询,它听起来与this question非常相似,所以我会说:

nlargest(1)

使用card group_code XXX 111 725 YYY 111 325 Name: amount, dtype: int64 返回

{{1}}