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

时间:2018-07-18 11:51:33

标签: python pandas dataframe

我有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

是否有一种简便的方法,而无需遍历数据帧以检查索引是否匹配?

1 个答案:

答案 0 :(得分:2)

我认为您首先需要rename列以对齐here中的DataFrame,然后concat来按df1.index和{{1 }}:

df1.columns

编辑:如果仅需要索引的reindex

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