You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于行索引和列名实现两个DataFrame的对应值相乘?

嘿,这个需求用pandas自带的功能就能完美解决,根本不用复杂的循环~

核心思路就是利用pandas的自动对齐特性:当你对两个DataFrame做乘法运算时,它会自动匹配行索引和列名,只有同时存在的索引和列的对应位置才会相乘,不匹配的位置会保留NaN,正好符合你要的规则。

具体实现代码

先把你的DF1和DF2构造出来(方便复现):

import pandas as pd

# 构造DF1
data1 = {
    'GOOG': [None, None],
    'AAPL': [150, -150],
    'XOM': [None, None],
    'IBM': [None, 400],
    'Cash': [None, None]
}
DF1 = pd.DataFrame(data1, index=['2009-01-14', '2009-01-21'])
DF1.index.name = 'Date'

# 构造DF2
data2 = {
    'GOOG': [None, None],
    'AAPL': [100, 30],
    'XOM': [None, None],
    'IBM': [None, 15],
    'Cash': [None, None]
}
DF2 = pd.DataFrame(data2, index=['2009-01-14', '2009-01-21'])
DF2.index.name = 'Date'

然后直接用乘法运算就行,两种方式都可以:

方式1:用mul()方法(更灵活,支持额外参数)

result_df = DF1.mul(DF2)

方式2:直接用*运算符(更简洁)

result_df = DF1 * DF2

运行结果

不管用哪种方式,得到的结果都是你想要的:

GOOG    AAPL  XOM     IBM  Cash
Date                                       
2009-01-14   NaN  15000.0  NaN     NaN   NaN
2009-01-21   NaN  -4500.0  NaN  6000.0   NaN

额外说明

如果你的DF1和DF2存在索引或列不完全一致的情况,比如DF1多了一个日期索引,或者DF2多了一个列,这个方法依然有效:不匹配的索引/列对应的位置会自动填充NaN,完全符合你的需求~

内容的提问来源于stack exchange,提问作者Nerblo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:16:57