我有两个数据帧。 Dataframe A是一个实验数据框,其中包含已使用的事物列表(以及日期等)。数据帧B是参考数据帧。数据帧A和B具有匹配的索引号。我想用Dataframe B中的额外信息更新Dataframe A,其中索引号匹配。
例如
DFA
REF
ABC
DEF
DEF
XYZ
dfB
REF VALUE
ABC 1.23
DEF 2.22
XYZ 3.33
实际上,参考数据帧比实验数据帧大得多。我想在数据框A中创建一个新列,其中数据框B的值基于匹配的引用。我已经尝试了'is in',但是错误匹配系列的长度会产生错误。 我已尝试使用合并但由于数据框A重复参考值,合并的数据框有太多行。 是否有一种有效的方法可以在不为每个参考创建新系列或列的情况下执行此操作?
答案 0 :(得分:1)
将 map
与 set_index
df1['res'] = df1.REF.map(df2.set_index('REF')['VALUE'])
REF res
0 ABC 1.23
1 DEF 2.22
2 DEF 2.22
3 XYZ 3.33
答案 1 :(得分:0)
You can do a simple join
Assuming your indexes are REF
in both dataframes, you can simply do
dfA.join(dfB)
Full code:
import pandas as pd
dfA = pd.DataFrame(['ABC', 'DEF', 'DEF', 'XYZ'], columns=['REF'])
dfB = pd.DataFrame([['ABC', 1.23], ['DEF', 2.22], ['XYZ', 3.33]], columns=['REF', 'VALUE'])
dfA = dfA.set_index('REF')
dfB = dfB.set_index('REF')
dfA.join(dfB)