如何用字典映射列对索引匹配的Pandas DataFrame逐元素相乘?
简洁实现方法
可以通过构造与df1列结构匹配的映射DataFrame,再直接逐元素相乘,代码非常简洁:
import pandas as pd # 构造示例数据 df1 = pd.DataFrame( {'ABC': [1,4], 'DEF': [2,7], 'XYZ': [3,2]}, index=['01/01/2004', '05/01/2004'] ) df2 = pd.DataFrame( {'Echo': [5,-1], 'Epsilon': [10,-2]}, index=['01/01/2004', '05/01/2004'] ) d = {'ABC': 'Echo', 'DEF': 'Echo', 'XYZ': 'Epsilon'} # 核心代码 match_df = pd.DataFrame({col: df2[d[col]] for col in df1.columns}) result = df1 * match_df print(result)
运行后得到的结果与预期一致:
| Index | ABC | DEF | XYZ |
|---|---|---|---|
| 01/01/2004 | 5 | 10 | 30 |
| 05/01/2004 | -4 | -7 | -4 |
一行式简化写法
利用apply直接遍历df1列并完成对应相乘:
result = df1.apply(lambda col: col * df2[d[col.name]], axis=0)
内容的提问来源于stack exchange,提问作者Vinny B
相关产品推荐
相关产品推荐

