Python pandas将多个groupby结果放入同一个表中
我有以下Python pandas将多个groupby结果放入同一个表中,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我有以下df ccode year_month user tcode 10 201903 WF MI 10 201903 WF MI 10 201903 QQ MI 10 201903 QQ MI 20 201904 BATCH MI 20 201904 WF MI 2
df
ccode year_month user tcode
10 201903 WF MI
10 201903 WF MI
10 201903 QQ MI
10 201903 QQ MI
20 201904 BATCH MI
20 201904 WF MI
20 201904 BATCH MI
我喜欢做以下几件事
inv_tran_user_ccode_ym_gr_df = df.groupby(
['tcode', 'user', 'ccode', 'year_month']).size().reset_index(name='count')
inv_tran_user_ccode_ym_gr_df['bus_unit_pct'] = inv_tran_user_ccode_ym_gr_df['count'].div(
inv_tran_user_ccode_ym_gr_df.groupby(['ccode', 'year_month'])['count'].transform('sum')).mul(
100).round(2)
inv_tran_user_ym_gr_df = df.groupby(
['tcode', 'user', 'year_month']).size().reset_index(name='count')
inv_tran_user_ym_gr_df['org_pct'] = inv_tran_user_ym_gr_df['count'].div(
inv_tran_user_ym_gr_df.groupby(['year_month'])['count'].transform('sum')).mul(
100).round(2)
我想知道是否可以将org\u pct
和bus\u unit\u pct
放在同一张表中
ccode year_month user tcode org_pct bus_unit_pct
10 201903 WF MI 50% 50%
10 201903 QQ MI 50% 50%
20 201904 WF MI 33% 33%
20 201904 BATCH MI 67% 67%
你已经完成了所有的艰苦工作。这是一个相对简单的
合并
:
(库存交易用户账户账户账户存款准备金率下降('count',axis=1)
.merge(inv_trans_user_ym_gr_df.drop('count',axis=1),
on=['year\u month','user','tcode']))
导致
tcode user ccode year_month bus_unit_pct org_pct
0 MI BATCH 20 201904 66.67 66.67
1 MI QQ 10 201903 50.00 50.00
2 MI WF 10 201903 50.00 50.00
3 MI WF 20 201904 33.33 33.33
你已经完成了所有的艰苦工作。这是一个相对简单的
合并
:
(库存交易用户账户账户账户存款准备金率下降('count',axis=1)
.merge(inv_trans_user_ym_gr_df.drop('count',axis=1),
on=['year\u month','user','tcode']))
导致
tcode user ccode year_month bus_unit_pct org_pct
0 MI BATCH 20 201904 66.67 66.67
1 MI QQ 10 201903 50.00 50.00
2 MI WF 10 201903 50.00 50.00
3 MI WF 20 201904 33.33 33.33
您可以简单地将这两个数据集合并在一起
result = pd.merge(inv_tran_user_ccode_ym_gr_df, inv_tran_user_ym_gr_df, on=['tcode','user','year_month'])
您可以简单地将这两个数据集合并在一起
result = pd.merge(inv_tran_user_ccode_ym_gr_df, inv_tran_user_ym_gr_df, on=['tcode','user','year_month'])
从原始df开始,您还可以尝试使用
groupby
,然后使用normalize=True
使用value\u counts
:
每份文件:
如果为True,则返回的对象将包含唯一值的相对频率
从原始df开始,您还可以尝试使用
groupby
,然后使用normalize=True
使用value\u counts
:
每份文件:
如果为True,则返回的对象将包含唯一值的相对频率