![](/img/trans.png)
[英]Calculate pandas dataframe index difference based on the value of another column
[英]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.index
和df1.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.