Python 熊猫按三列分组,但保留所有其他列
我有这样的数据框:Python 熊猫按三列分组,但保留所有其他列,python,pandas,dataframe,Python,Pandas,Dataframe,我有这样的数据框: offer_id affiliate_id affiliate_source affiliate_sub5 advertiser_id Payout_cent Revenue_cents 428572 1327 14331605 14331605 291 50 30 428572 1327 1465 1465
offer_id affiliate_id affiliate_source affiliate_sub5 advertiser_id Payout_cent Revenue_cents
428572 1327 14331605 14331605 291 50 30
428572 1327 1465 1465 291 50 30
428572 1327 1336 1336 291 50 30
428572 1327 14331605 14331605 291 50 30
428572 1327 14331605 14331605 291 50 30
我将三个栏目分为“提供id”、“附属id”、“附属来源”
操作:
df1.groupby(['offer_id', 'affiliate_id', 'affiliate_source'])[["payout_cents", "revenue_cents"]].sum()
结果:
offer_id affiliate_id affiliate_source payout_cents revenue_cents
428572 1327 14331605 90 150
1465 30 50
1336 30 50
问题:
在集团运营后,我需要获得其他栏目,如“广告客户id”和“附属机构sub5”。
谢谢。我想您需要:
另一个解决方案包括:
然后在
groupby()
中使用它们:
总的来说,可能会有几个(不同的)广告客户id。你想要哪一个?如果它们都相同,您可以将它们添加到分组列中。是的,它们是不同的。所以我也需要根据广告商id进行分组?不,如果它们不同,你要么为每个组选择一个(第一个,最小的一个等),要么你可以按照jezrael的方法生成一个与原始数据帧长度相同的数据帧。好问题!:)我想按三列分组,而不是按所有列分组。
cols = ['offer_id', 'affiliate_id', 'affiliate_source']
df2 = df1.groupby(cols)[["payout_cents", "revenue_cents"]].sum().add_suffix('_sum')
df = df1.join(df2, on=cols)
print (df)
offer_id affiliate_id affiliate_source affiliate_sub5 advertiser_id \
0 428572 1327 14331605 14331605 291
1 428572 1327 1465 1465 291
2 428572 1327 1336 1336 291
3 428572 1327 14331605 14331605 291
4 428572 1327 14331605 14331605 291
payout_cents revenue_cents payout_cents_sum revenue_cents_sum
0 50 30 150 90
1 50 30 50 30
2 50 30 50 30
3 50 30 150 90
4 50 30 150 90
cols = ['offer_id', 'affiliate_id', 'affiliate_source']
cols1 = ["payout_cents", "revenue_cents"]
df1[['{}_sum'.format(x) for x in cols1]] = df1.groupby(cols)[cols1].transform('sum')
df1.groupby(['offer_id', 'affiliate_id', 'affiliate_source', 'advertiser_id', 'affiliate_sub5'])[["payout_cents", "revenue_cents"]].sum()