Df1:
Id val
1 4
3 7
9 2
4 5
Df2:
Id val
1 5
7 2
必填:
Id val
1 5
3 7
9 2
4 5
7 2
我有这些df1和df2,我想获取必需的df,其中Df1和Df2中存在的常见ID将被更新,而新ID将被追加。
我似乎找不到我是否需要使用更新,合并或联接之类的东西。
答案 0 :(得分:6)
将concat
与drop_duplicates
一起使用(请注意,可能不会保留订单)。
pd.concat([df1, df2]).drop_duplicates('Id', keep='last')
Id val
1 3 7
2 9 2
3 4 5
0 1 5
1 7 2
答案 1 :(得分:5)
使用combine_first
df2.set_index('Id').combine_first(df1.set_index('Id')).reset_index()
Out[6]:
Id val
0 1 5.0
1 3 7.0
2 4 5.0
3 7 2.0
4 9 2.0
答案 2 :(得分:3)
dictionary
开箱m1 = dict(zip(df1.Id, df1.val))
m2 = dict(zip(df2.Id, df2.val))
pd.DataFrame([*{**m1, **m2}.items()], columns=['Id', 'val'])
Id val
0 1 5
1 3 7
2 4 5
3 7 2
4 9 2
cols = ['Id', 'val']
m1 = dict(zip(*map(df1.get, cols)))
m2 = dict(zip(*map(df2.get, cols)))
pd.DataFrame([*{**m1, **m2}.items()], columns=cols)
get
m1 = dict(zip(df1.Id, df1.val))
m2 = dict(zip(df2.Id, df2.val))
f = lambda x: m2.get(x, m1.get(x, x))
pd.DataFrame([[x, f(x)] for x in {*df1.Id, *df2.Id}], columns=['Id', 'val'])
Id val
0 1 5
1 3 7
2 4 5
3 7 2
4 9 2
答案 3 :(得分:2)