Concat() 交替组由 python3.0

我的目标是 concat() 在两个数据帧之间交替组。


想要的结果:


 group  ordercode   quantity

0  A            1

    B           1

    C       1

    D          1

0   A          1

    B           3       


1   A           1

    B           2

    C           1

1  A        1

    B           1

    C           2

我的数据框:


import pandas as pd

df1=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   quantity

0   0   A   1

0   0   A   1

1       B   1

1       B   3

2       C   1

3       D   1

4   1   A   1

4   1   A   1

5       B   2

5       B   1

6       C   1

6       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'] = 1

df['group'] = sorted(list(range(0, len(df)//3, 1)) * 4)[0:len(df)]



df=df.groupby(['group', 'ordercode']).sum() 

问题:


我哪里出错了?它通过取index


我用过,.set_index("group")但也没有用。


慕森王
浏览 129回答 1
1回答

SMILET

使用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  g0       0         A         1  01       0         B         1  02       0         C         1  03       0         D         1  04       0         A         1  05       0         B         3  06       1         C         2  07       1         A         1  18       1         B         2  19       1         C         1  110      1         A         1  111      1         B         1  1最后删除列:dfff = dfff.drop('g', axis=1)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python