如何在两个DataFrame间按相同Date替换RPM值?
解决方法
方法1:使用update方法(推荐)
update方法会直接在原DataFrame上修改,根据索引匹配替换对应列的值,完美适配这种按主键匹配替换的场景:
import pandas as pd # 构造你的DataFrame df1 = pd.DataFrame({'Date': [0,1,2,3,4,5,6,7], 'RPM': [0]*8}) df2 = pd.DataFrame({'Date': [0,2,4,6], 'RPM': [0,2,4,6]}) # 将Date设为索引实现匹配替换,最后恢复原索引 df1.set_index('Date', inplace=True) df2.set_index('Date', inplace=True) df1.update(df2) df1.reset_index(inplace=True) print(df1)
运行后输出:
Date RPM 0 0 0.0 1 1 0.0 2 2 2.0 3 3 0.0 4 4 4.0 5 5 0.0 6 6 6.0 7 7 0.0
方法2:字典映射替换
先将df2的Date与RPM转为字典,再通过map匹配替换,未匹配到的保留原数值:
# 构建Date到RPM的映射字典 rpm_map = df2.set_index('Date')['RPM'].to_dict() # 替换df1的RPM列 df1['RPM'] = df1['Date'].map(rpm_map).fillna(df1['RPM'])
为什么replace方法没生效?
replace默认是值对值的直接替换,比如直接调用df1['RPM'].replace(df2['RPM']),它只会替换两个DataFrame中RPM值完全相等的元素,不会关联Date列的对应关系,自然达不到按Date匹配替换的效果。
内容的提问来源于stack exchange,提问作者Asaf Nunu
相关产品推荐
相关产品推荐

