Python 使用局部映射更新数据帧的列

Python 使用局部映射更新数据帧的列,python,pandas,dictionary,dataframe,indexing,Python,Pandas,Dictionary,Dataframe,Indexing,我有一个包含许多列的大型数据框。我还有一个较小的数据框,它有两列——称它们为“label”和“value”,它们都在较大的数据框中。我想用较小数据帧的“value”列替换较大数据帧的“value”列,用于较大数据帧的行,其中“label”与较小数据帧中的行匹配 for循环的逻辑为: largeDF = pd.DataFrame([['a',1],['b',2],['c',3],['d',4],['e',5]], columns=['label','value']).set_index('labe

我有一个包含许多列的大型数据框。我还有一个较小的数据框,它有两列——称它们为“label”和“value”,它们都在较大的数据框中。我想用较小数据帧的“value”列替换较大数据帧的“value”列,用于较大数据帧的行,其中“label”与较小数据帧中的行匹配

for循环的逻辑为:

largeDF = pd.DataFrame([['a',1],['b',2],['c',3],['d',4],['e',5]], columns=['label','value']).set_index('label')
smallDF = pd.DataFrame([['d',6],['e',7]], columns=['label','value']).set_index('label')
for label in smallDF.index:
    largeDF.loc[label,'value'] = smallDF.loc[label,'value']
不幸的是,答案显而易见

largeDF['value'] = smallDF['value']
不起作用,因为它会忽略不在小DF中的标签。使用.map()也有类似的问题

我使用的for循环似乎非常不和谐、不平缓且缓慢。我缺少的更好的方法是什么?

您可以使用:

总而言之:

largeDF = pd.DataFrame([['a',1],['b',2],['c',3],['d',4],['e',5]], columns=['label','value'])
            .set_index('label')
largeDF['a'] = 1
largeDF['b'] = 'f'
smallDF = pd.DataFrame([['d',6],['e',7]], columns=['label','value']).set_index('label')
print (largeDF)
       value  a  b
label             
a          1  1  f
b          2  1  f
c          3  1  f
d          4  1  f
e          5  1  f

print (smallDF)
       value
label       
d          6
e          7

largeDF['value'] = smallDF['value'].combine_first(largeDF['value']).astype(int)
print (largeDF)
       value  a  b
label             
a          1  1  f
b          2  1  f
c          3  1  f
d          6  1  f
e          7  1  f
largeDF = pd.DataFrame([['a',1],['b',2],['c',3],['d',4],['e',5]], columns=['label','value'])
            .set_index('label')
largeDF['a'] = 1
largeDF['b'] = 'f'
smallDF = pd.DataFrame([['d',6],['e',7]], columns=['label','value']).set_index('label')
print (largeDF)
       value  a  b
label             
a          1  1  f
b          2  1  f
c          3  1  f
d          4  1  f
e          5  1  f

print (smallDF)
       value
label       
d          6
e          7

largeDF['value'] = smallDF['value'].combine_first(largeDF['value']).astype(int)
print (largeDF)
       value  a  b
label             
a          1  1  f
b          2  1  f
c          3  1  f
d          6  1  f
e          7  1  f