python-3.x 如何合并Pandas数据框而不获得重复行

fbcarpbf  于 2023-03-20  发布在  Python
关注(0)|答案(1)|浏览(155)

我有2个数据框,每个都有一个共同的值在列C。我使用pd.merge来合并这些数据框,但我不希望重复行为每个匹配对。这将是更清楚地可视化如下:
东风1

df = pd.DataFrame(columns=['A','B','C'])
df['A'] = ['2_21','2_34']
df['B'] = ['X1','X2']
df['C'] = ['2','2']
print(df)

     A  B  C
0  2_21 X1 2
1  2_34 X2 2

东风2

df2 = pd.DataFrame(columns=['D','E','C'])
df2['D'] = ['2_27','2_35']
df2['E'] = ['Y1','Y2']
df2['C'] = ['2','2']
print(df)
     D  E  C        
0  2_27 Y1 2
1  2_35 Y2 2`

不需要的输出/ Dataframe :

df1.merge(df2, how='left', on='C')

    A   B  C  D    E
0  2_21 X1 2  2_27 Y1
1  2_21 X1 2  2_35 Y2
2  2_34 X2 2  2_27 Y1
3  2_34 X2 2  2_35 Y2

所需输出/ Dataframe

A   B  C  D    E
0  2_21 X1 2  2_27 Y1
1  2_34 X2 2  2_35 Y2

我已经尝试通过删除重复项来过滤不需要的输出/ Dataframe ,但这不起作用,因为我需要将列拆分为子列并删除子列的重复项,而不是单个单元格(尝试后似乎不实用)。
我也不能简单地删除不需要的 Dataframe 中不需要的行,因为有许多随机出现的行需要手动删除。
合并的Pandas文档是here,但它似乎不允许这样做。
有人知道一个可能的方法来实现这一点吗?我真的很感谢你的帮助提前因为我一直在这个问题上了一段时间。谢谢

ee7vknir

ee7vknir1#

如果你真的想根据位置将df中的所有C合并到df2中的所有C,你需要创建一个join helper列,就像我在这里用'key'所做的那样:

df.assign(key=df.groupby('C').cumcount()).merge(df2.assign(key=df2.groupby('C').cumcount()))

输出:

A   B  C  key     D   E
0  2_21  X1  2    0  2_27  Y1
1  2_34  X2  2    1  2_35  Y2

然后可以删除结果中的键列。
或者,如果您只想并排连接两个 Dataframe ,则使用pd.concat([df, df2], axis=1)

相关问题