通过python3.0将Dataframe [groupby()]分组

时间:2018-10-10 10:40:53

标签: python python-3.x

 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]})

我发现0中的grp仅分配给第一行

grp order
0 A 1

不是

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

groupby(*multiple_columns*).*some_action*之后得到的是DataframeMultiIndex。您可以重置它:

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