我有以下两个数据框:
import pandas as pd
data1 = {'date' : ['1', '2','3'],
'value1' : ['a', 'b' ,'c'],
'value2' : ['12','24','4']}
data2 = {'date' : ['2','3','4'],
'value1' : ['b', 'c' ,'g'],
'value2' : ['24','4','55']}
df1 = pd.DataFrame(data1)
df1 = df1.set_index('date')
df2 = pd.DataFrame(data2)
df2 = df2.set_index('date')
这是我想要的输出:
desired_result = {'date' : ['1','2','3','4'],
'value1' : ['a', 'b', 'c', 'g'],
'value2' : ['12', '24', '4', '55']}
我已经尝试了所有不同类型的合并,加入,concat但无法弄清楚。
这不是一个合并问题,但您可以使用combine_first:
df1.combine_first(df2).reset_index()
date value1 value2
0 1 a 12
1 2 b 24
2 3 c 4
3 4 g 55
另一个建议是concat和drop_duplicates:
pd.concat([df1, df2]).reset_index('date').drop_duplicates('date')
date value1 value2
0 1 a 12
1 2 b 24
2 3 c 4
5 4 g 55
感觉就像一个groupby问题
pd.concat([df1,df2]).groupby(level=0).last()
value1 value2
date
1 a 12
2 b 24
3 c 4
4 g 55
只需使用outer合并并选择正确keys的连接就像这样。
删除set_index数据帧,你不需要。
data1 = {'date' : ['1', '2','3'],
'value1' : ['a', 'b' ,'c'],
'value2' : ['12','24','4']}
data2 = {'date' : ['2','3','4'],
'value1' : ['b', 'c' ,'g'],
'value2' : ['24','4','55']}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
df4 = pd.merge(df1, df2, on=['date', 'value1', 'value2'], how='outer')
产量
date value1 value2
0 1 a 12
1 2 b 24
2 3 c 4
3 4 g 55
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。