繁体   English   中英

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

[英]Copy column value from one dataframe to another based on id in Pandas

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

尝试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

如果行的顺序无关紧要,那么连接两个 dfs 和 drop_duplicates 将达到结果,

df2.append(df1).drop_duplicates(subset='ID')

另一种解决方案是,

s = df1["Name"]
df1.loc[:,"Name"]=df1["ID"].map(df2.set_index("ID")["Name"].to_dict()).fillna(s)

开/关:

   ID Name
0   1    X
1   2    Y
2   4    C
3  16    D
4   7    Z

再考虑一个

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”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM