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个查询,如果有人可以帮助我,那将是很棒的。
注意:给出的代码仅用于了解我的数据框的外观。
答案 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}}