Python 使用局部映射更新数据帧的列
我有一个包含许多列的大型数据框。我还有一个较小的数据框,它有两列——称它们为“label”和“value”,它们都在较大的数据框中。我想用较小数据帧的“value”列替换较大数据帧的“value”列,用于较大数据帧的行,其中“label”与较小数据帧中的行匹配 for循环的逻辑为: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
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