[英]Merging two dataframes based on common values using pandas python?
这是我关于stackoverflow的第一个问题,所以请多多包涵。
我是 pandas 的新手,我需要根据列中的值合并两个数据帧:
df1:
Col1 Col2
0 A 10
1 B 12
2 C 22
3 D 22
4 E 22
5 F 11
6 G 55
7 H 60
df2:
Col3 Col4
0 J 11
1 K 22
2 L 22
3 M 60
4 N 80
5 O 45
6 P 12
7 Q 65
生成的 dataframe 应该是这样的:
Col1 Col2 Col3 Col4
0 B 12 P 12
1 C 22 K 22
2 D 22 L 22
3 H 60 M 60
它应该比较 Col2 和 Col4 并且只保留公共行并将两个数据帧合并为一个。 我尝试了以下代码,但结果不是我想要的。
both_DFS=df1.merge(df2,left_on='Col2',right_on='Col4')
对于这个结果是:
Col1 Col2 Col3 Col4
0 B 12 P 12
1 C 22 K 22
2 C 22 L 22
3 D 22 K 22
4 D 22 L 22
5 E 22 K 22
6 E 22 L 22
7 H 60 M 60
您需要使用groupby().cumcount
枚举重复的行,然后合并:
(df1.assign(idx=df1.groupby('Col2').cumcount())
.merge(df2.assign(idx=df2.groupby('Col4').cumcount()),
left_on=['Col2','idx'],
right_on=['Col4','idx'])
)
Output:
Col1 Col2 idx Col3 Col4
0 B 12 0 P 12
1 C 22 0 K 22
2 D 22 1 L 22
3 F 11 0 J 11
4 H 60 0 M 60
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.