根据Pandas中的ID将列值从一个数据框复制到另一个数据框

时间:2020-09-04 13:48:44

标签: python python-3.x pandas dataframe

我正在尝试将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']

4 个答案:

答案 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”