我有以下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_pctbus_unit_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%

最佳答案

您已经完成了所有艰苦的工作。从这里开始,这是一个相对简单的merge

(inv_tran_user_ccode_ym_gr_df.drop('count', axis=1)
                            .merge(inv_tran_user_ym_gr_df.drop('count', axis=1),
                                   on=['year_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

关于python - Pandas 将多个groupby结果放入同一张表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57077138/

10-12 22:38