我正在尝试将Name
中的df2
复制到df1
中,其中两个数据帧之间ID
是公用的。
df1:
ID Name
1 A
2 B
4 C
16 D
7 E
df2:
ID Name
1 X
2 Y
7 Z
预期输出:
ID Name
1 X
2 Y
4 C
16 D
7 Z
我已经尝试过了,但是没有成功。我不明白如何在这里分配价值。我分配的是=df2['Name']
,这是错误的。
for i in df2["ID"].tolist():
df1['Name'].loc[(df1['ID'] == i)] = df2['Name']
答案 0 :(得分:2)
尝试使用update
df1 = df1.set_index('ID')
df1.update(df2.set_index('ID'))
df1 = df1.reset_index()
df1
Out[476]:
ID Name
0 1 X
1 2 Y
2 4 C
3 16 D
4 7 Z
答案 1 :(得分:1)
如果行的顺序无关紧要,则连接两个dfs和drop_duplicates将获得结果,
df2.append(df1).drop_duplicates(subset='ID')
答案 2 :(得分:0)
另一个解决方案是
s = df1["Name"]
df1.loc[:,"Name"]=df1["ID"].map(df2.set_index("ID")["Name"].to_dict()).fillna(s)
o / P:
ID Name
0 1 X
1 2 Y
2 4 C
3 16 D
4 7 Z
答案 3 :(得分:0)
还有一个需要考虑的地方
df,dg = df1,df2
df = df.set_index('ID')
dg = dg.set_index('ID')
df.loc[dg.index,:] = dg # All columns
#df.loc[dg.index,'Name'] = dg.Name # Single column
df = df.reset_index()
>>> df
ID Name
0 1 X
1 2 Y
2 4 C
3 16 D
4 7 Z
或者对于单个列(两个索引都为“ ID”