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
我该如何解决这个问题?
答案 0 :(得分:1)
在groupby(*multiple_columns*).*some_action*
之后得到的是Dataframe
和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