Python 基于特定列信息合并两个数据帧
我试图用几种方法处理数据帧。 现在我想根据特定的列信息合并两个数据帧,并删除重复的行 可能吗? 我试图使用连接函数,但失败了 例如,如果我想用 条件:Python 基于特定列信息合并两个数据帧,python,pandas,dictionary,dataframe,Python,Pandas,Dictionary,Dataframe,我试图用几种方法处理数据帧。 现在我想根据特定的列信息合并两个数据帧,并删除重复的行 可能吗? 我试图使用连接函数,但失败了 例如,如果我想用 条件: 如果c1和c2信息相同,则删除重复的行(仅使用df1,即使df1和df2之间的c3数据不同) 如果c1和c2信息不同,则使用两行(df1、df2) 之前: df1 c1 c2 c3 0 0 x {'a':1 ,'b':2} 1 0 y {'a':3 ,'b':4} 2 2 z {'a':5 ,'b'
- 如果c1和c2信息相同,则删除重复的行(仅使用df1,即使df1和df2之间的c3数据不同)
- 如果c1和c2信息不同,则使用两行(df1、df2)
df1
c1 c2 c3
0 0 x {'a':1 ,'b':2}
1 0 y {'a':3 ,'b':4}
2 2 z {'a':5 ,'b':6}
df2
c1 c2 c3
0 0 x {'a':11 ,'b':12}
1 0 y {'a':13 ,'b':14}
2 3 z {'a':15 ,'b':16}
预期结果d3:
c1 c2 c3
0 0 x {'a':1 ,'b':2}
1 0 y {'a':3 ,'b':4}
2 2 z {'a':5 ,'b':6}
3 3 z {'a':15 ,'b':16}
在此处输入代码您可以首先通过使用
合并
确定哪些行仅在df2中,并传递how='right'
和indicator=True
,然后使用df1
确定该行:
In [125]:
merged = df1.merge(df2, left_on=['c1','c2'], right_on=['c1','c2'], how='right', indicator=True)
merged = merged[merged['_merge']=='right_only']
merged = merged.rename(columns={'c3_y':'c3'})
merged
Out[125]:
c1 c2 c3_x c3 _merge
2 3 z NaN {'a':15 ,'b':16} right_only
In [126]:
combined = pd.concat([df1, merged[df1.columns]])
combined
Out[126]:
c1 c2 c3
0 0 x {'a':1 ,'b':2}
1 0 y {'a':3 ,'b':4}
2 2 z {'a':5 ,'b':6}
2 3 z {'a':15 ,'b':16}
如果我们分解上述内容:
In [128]:
merged = df1.merge(df2, left_on=['c1','c2'], right_on=['c1','c2'], how='right', indicator=True)
merged
Out[128]:
c1 c2 c3_x c3_y _merge
0 0 x {'a':1 ,'b':2} {'a':11 ,'b':12} both
1 0 y {'a':3 ,'b':4} {'a':13 ,'b':14} both
2 3 z NaN {'a':15 ,'b':16} right_only
In [129]:
merged = merged[merged['_merge']=='right_only']
merged
Out[129]:
c1 c2 c3_x c3_y _merge
2 3 z NaN {'a':15 ,'b':16} right_only
In [130]:
merged = merged.rename(columns={'c3_y':'c3'})
merged
Out[130]:
c1 c2 c3_x c3 _merge
2 3 z NaN {'a':15 ,'b':16} right_only
合并功能怎么样?