如何对两个DataFrame按相同索引、列逐元素对应相除?
解决方案
Pandas 的数值运算默认会按索引、列名同时自动对齐,天然适配你无序日期索引的使用场景,不需要手动匹配顺序,只需过滤掉仅在单个 DataFrame 中存在的索引行即可,有两种常用实现方式:
方式1:直接运算后过滤(写法简洁)
直接调用div方法做除法,再通过dropna去掉无匹配的行:
import pandas as pd # 示例数据构造 df1 = pd.DataFrame( {'value1': [1,2,5], 'value2': [3,4,6]}, index=[0,1,2] ) df2 = pd.DataFrame( {'value1': [2,2], 'value2': [2,2]}, index=[0,1] ) # 核心代码 result = df1.div(df2).dropna()
输出结果和你预期完全一致:
value1 value2 0 0.5 1.5 1 1.0 2.0
方式2:提前取共有索引(性能更好)
如果你的数据量很大,可以先取两个DataFrame的索引交集,只对共有部分做运算:
# 取双方共有的索引 common_idx = df1.index.intersection(df2.index) # 仅对共有索引的行做除法运算 result = df1.loc[common_idx] / df2.loc[common_idx]
日期索引适配说明
如果索引是无序的日期类型,上述代码不需要做任何修改,Pandas 对日期类型的索引对齐逻辑完全兼容,无论索引顺序多混乱,都会自动匹配相同日期的行做对应运算。
内容的提问来源于stack exchange,提问作者Ryszard Eggink
相关产品推荐
相关产品推荐

