如何基于行索引和列名实现两个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
相关产品推荐
相关产品推荐

