我有两个数据框:
df_old:
A B C D E
1 b1 c d1 e1
2 b2 c d2 e2
3 b3 c d3 e3
df:
A B C D F
2 b2 c2 d0 f2
4 b4 c1 d4 f4
5 b5 c2 d5 f5
我希望它们合并为:
A B C D E F
1 b1 c d1 e1
2 b2 c2 d2 e2 f2
3 b3 c d3 e3
4 b4 c1 d4 f4
5 b5 c2 d5 f5
我使用此代码,但是在省略行时会出现问题,例如df ['A']第1和第3行:
df1 = df_old.loc[:,df_old.columns != 'C']
df2 = df.loc[:len(df_old)-1, df.columns != 'B']
df2 = df2.loc[:, df2.columns != 'D']
df_m = pandas.merge(df1, df2,
how='outer', on=['A'])
df_m = pandas.merge(df_m, df.loc[len(df_old)-1:, ],
how='outer', on=['A', 'B', 'D', 'F'])
答案 0 :(得分:4)
用combine_first
df_old.set_index('A',inplace=True)
df1.set_index('A',inplace=True)
yourdf=df_old.combine_first(df1)
yourdf.reset_index(inplace=True)
yourdf.update(df1[['C']])
yourdf
Out[80]:
B C D E F
A
1 b1 c d1 e1 NaN
2 b2 c2 d2 e2 f2
3 b3 c d3 e3 NaN
4 b4 c1 d4 NaN f4
5 b5 c2 d5 NaN f5
答案 1 :(得分:1)
append
,groupby
/ agg
和last
/ first
。在某些列中,您希望保留第一个数据帧中的列。在其他列中,您更喜欢第二个数据框中的值。如果使用agg
,则可以控制执行哪些列。确保按照您选择的append
/ last
合理的顺序使用first
。
d = {'B': 'last', 'C': 'last', 'D': 'first', 'E': 'last', 'F': 'first'}
df_old.append(df).groupby('A', as_index=False).agg(d)
A B C D E F
0 1 b1 c d1 e1 NaN
1 2 b2 c2 d2 e2 f2
2 3 b3 c d3 e3 NaN
3 4 b4 c1 d4 NaN f4
4 5 b5 c2 d5 NaN f5