首页 > 解决方案 > 通过 python3.0 分组 Dataframe[groupby()]

问题描述

 df = pd.DataFrame({'order':['A', 'B', 'C', 'D', 'E', 'F'],'quantity':[1,1,2,3,3,4]})


df_out = df.order.repeat(df.quantity).reset_index(drop=True).to_frame()
df_out['grp'] = df_out.index // 4
df_out.groupby(['grp','order'])['order'].count().to_frame(name='quantity')

输出 :

      quantity
grp order          
0   A             1
    B             1
    C             2
1   D             3
    E             1
2   E             2
    F             2
3   F             2

在 groupby() 函数中,我得到了我想要的结果。但是当我尝试Concat()使用时df1

df1 = pd.DataFrame({'order':['A', 'B', 'C', 'D', 'E', 'F'],'quantity':[1,1,2,3,3,4]})

我发现0fromgrp仅分配给第一行

grp order
0 A 1

不像

quantity grp order
0 A 1 0 B 1 0 C 2

我怎么解决这个问题 ?

标签: pythonpython-3.x

解决方案


你得到groupby(*multiple_columns*).*some_action*的是一个Dataframewith MultiIndex。您可以重置它:

ans = (
    df_out
    .groupby(['grp', 'order'])['order']
    .count()
    .to_frame(name='quantity')
    .reset_index())

然后您可以使用任何列作为索引并删除该列:

ans.index = ans['grp']
ans = ans.drop('grp', axis=1)

ans是:

    order  quantity
grp                
0       A         1
0       B         1
0       C         2
1       D         3
1       E         1
2       E         2
2       F         2
3       F         2

推荐阅读