gpt4 book ai didi

python - python3.0的concat()交替组

转载 作者:太空宇宙 更新时间:2023-11-04 00:10:16 25 4
gpt4 key购买 nike

我的目标是在两个数据帧之间进行 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

你可以在这里看到连接是在每一行之间形成的,而不是按组形成的。它必须打印成

df1 的第 0 组df2 的组 0df1 的 group1df2 的 group1so 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") 但它也没有用。

最佳答案

使用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)

关于python - python3.0的concat()交替组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52735762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com