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

如何将月度DataFrame列与同年度的年度DataFrame列相乘?

解决月度与年度DataFrame对应年份列值相乘的问题

要实现月度(或日度)DataFrame某列与年度DataFrame对应年份列值相乘,核心是将月度数据的索引年份与年度数据的年份匹配,然后完成乘法运算。这里有两种简洁的实现方式:

方法一:通过年份映射字典快速实现

步骤直观易懂:

  1. 从年度DataFrame(df2)中提取年份与对应值的映射关系
  2. 提取月度DataFrame(df)索引的年份,匹配映射字典中的值
  3. 用月度列的值乘以匹配到的年度值,得到结果

具体代码如下:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:55:13