为了账号安全,请及时绑定邮箱和手机立即绑定

Concat() 交替组由 python3.0

Concat() 交替组由 python3.0

慕森王 2021-06-30 21:57:21
我的目标是 concat() 在两个数据帧之间交替组。想要的结果: group  ordercode   quantity0  A            1    B           1    C       1    D          10   A          1    B           3       1   A           1    B           2    C           11  A        1    B           1    C           2我的数据框:import pandas as pddf1=pd.DataFrame([[0,"A",1],[0,"B",1],[0,"C",1],[0,"D",1],[1,"A",1],[1,"B",2],[1,"C",1]],columns=["group","ordercode","quantity"])df2=pd.DataFrame([[0,"A",1],[0,"B",3],[1,"A",1],[1,"B",1],[1,"C",2]],columns=["group","ordercode","quantity"])print(df1)print(df2)我用过 dfff=pd.concat([df1,df2]).sort_index(kind="merge")但我得到了以下结果:    group   ordercode   quantity0   0   A   10   0   A   11       B   11       B   32       C   13       D   14   1   A   14   1   A   15       B   25       B   16       C   16       C   2您可以在这里看到连接是在每行之间形成的,而不是按组形成的。它必须像group 0 of df1 group0 of df2 group1 of df1 group1 of df2 和 so on注意:我已经使用groupby()函数创建了这些 DataFrame  df = pd.DataFrame(np.concatenate(df.apply(lambda x: [x[0]] * x[1], 1).as_matrix()),               columns=['ordercode'])df['quantity'] = 1df['group'] = sorted(list(range(0, len(df)//3, 1)) * 4)[0:len(df)]df=df.groupby(['group', 'ordercode']).sum() 问题:我哪里出错了?它通过取index我用过,.set_index("group")但也没有用。
查看完整描述

1 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

使用cumcount了用于通过排序助手列sort_values:


df1['g'] = df1.groupby('ordercode').cumcount()

df2['g'] = df2.groupby('ordercode').cumcount()


dfff = pd.concat([df1,df2]).sort_values(['group','g']).reset_index(drop=True)

print (dfff)

    group ordercode  quantity  g

0       0         A         1  0

1       0         B         1  0

2       0         C         1  0

3       0         D         1  0

4       0         A         1  0

5       0         B         3  0

6       1         C         2  0

7       1         A         1  1

8       1         B         2  1

9       1         C         1  1

10      1         A         1  1

11      1         B         1  1

最后删除列:


dfff = dfff.drop('g', axis=1)


查看完整回答
反对 回复 2021-07-13
  • 1 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信