如何将月度DataFrame列与同年度的年度DataFrame列相乘?
解决月度与年度DataFrame对应年份列值相乘的问题
要实现月度(或日度)DataFrame某列与年度DataFrame对应年份列值相乘,核心是将月度数据的索引年份与年度数据的年份匹配,然后完成乘法运算。这里有两种简洁的实现方式:
方法一:通过年份映射字典快速实现
步骤直观易懂:
- 从年度DataFrame(
df2)中提取年份与对应值的映射关系 - 提取月度DataFrame(
df)索引的年份,匹配映射字典中的值 - 用月度列的值乘以匹配到的年度值,得到结果
具体代码如下:
import pandas as pd # 初始化你的数据 df = pd.DataFrame({'column1' : [1, 1, 1, 2, 2]}, index=['2018-01-01', '2018-01-02', '2018-01-03', '2019-01-03', '2019-01-02']) df.index = pd.to_datetime(df.index) df2 = pd.DataFrame({'columnX' : [2, 3]}, index=['2018', '2019']) df2.index = pd.to_datetime(df2.index) # 1. 创建年份到columnX值的映射字典 year_to_value = df2.set_index(df2.index.year)['columnX'].to_dict() # 2. 匹配年份并计算结果 df['Results'] = df['column1'] * df.index.year.map(year_to_value) print(df)
运行后会得到你预期的结果:
column1 Results 2018-01-01 1 2 2018-01-02 1 2 2018-01-03 1 2 2019-01-03 2 6 2019-01-02 2 6
方法二:利用merge结合年份提取实现
如果你更习惯用DataFrame合并的思路,也可以先给两个表都添加年份列,再合并后计算:
import pandas as pd # 初始化你的数据 df = pd.DataFrame({'column1' : [1, 1, 1, 2, 2]}, index=['2018-01-01', '2018-01-02', '2018-01-03', '2019-01-03', '2019-01-02']) df.index = pd.to_datetime(df.index) df2 = pd.DataFrame({'columnX' : [2, 3]}, index=['2018', '2019']) df2.index = pd.to_datetime(df2.index) # 给df添加年份列 df['year'] = df.index.year # 给df2添加年份列 df2['year'] = df2.index.year # 合并两个表(按年份匹配) merged_df = df.merge(df2[['year', 'columnX']], on='year', how='left') # 计算结果 merged_df['Results'] = merged_df['column1'] * merged_df['columnX'] # 还原原索引并保留需要的列 result = merged_df.set_index(df.index)[['column1', 'Results']] print(result)
这个方法同样能得到预期结果,适合更熟悉合并操作的场景。
两种方法都能高效完成需求,你可以根据自己的习惯选择~
内容的提问来源于stack exchange,提问作者Peslier53
相关产品推荐
相关产品推荐

