繁体   English   中英

根据索引使Pandas Dataframe列等于另一个Dataframe中的值

[英]Make Pandas Dataframe column equal to value in another Dataframe based on index

我有以下3个数据框

df1

id     first_name      surname     state
1                  
88     
190
2509  
....  

df2

id     given_name      surname     state    street_num
17     John            Doe         NY       5
88     Tom             Murphy      CA       423
190    Dave            Casey       KY       250
....

df3

id     first_name      family_name state    car
1      John            Woods       NY       ford
74     Tom             Kite        FL       vw
2509   Mike            Johnson     KY       toyota

df1中的某些ID在df2中,而其他ID在df3中。 df2和df3中也有ID,而df1中没有。

编辑: df1中也有一些id不在df2或df3中。

我想用包含id的数据框中的值填充df1中的列。 但是,我不需要所有列(因此我认为合并不适合)。 我尝试使用isin函数,但是那样我无法单独更新记录并出现错误。 这是我使用isin的尝试:

df1.loc[df1.index.isin(df2.index), 'first_name'] = df2.given_name

有没有一种简单的方法可以执行此操作而无需遍历数据帧以检查索引是否匹配?

我认为您首先需要rename列以在concat对齐DataFrame ,然后reindex以按df1.indexdf1.columns进行过滤:

df21 = df2.rename(columns={'given_name':'first_name'})
df31 = df3.rename(columns={'family_name':'surname'})
df = pd.concat([df21, df31]).reindex(index=df1.index, columns=df1.columns)
print (df)
     first_name  surname state
d                             
1          John    Woods    NY
88          Tom   Murphy    CA
190        Dave    Casey    KY
2509       Mike  Johnson    KY

编辑:如果仅需要索引intersection

df4 = pd.concat([df21, df31])
df = df4.reindex(index=df1.index.intersection(df4.index), columns=df1.columns)

暂无
暂无

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

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