You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Pandas将月度数据合并至日度数据并保留日度索引

嘿,这需求我熟!要把月度贸易余额数据「扩展」到对应月份的每一天,和日度股价合并成完整的数据集,用Python的pandas几步就能搞定,我给你写详细的步骤和代码,包你能用~

解决方案步骤

1. 导入工具并读取数据

首先导入pandas,然后分别读取两个CSV文件,记得把日期列设置为索引,方便后续处理:

import pandas as pd

# 读取日度股价数据,自动解析日期索引
df_daily = pd.read_csv('A.csv', index_col=0, parse_dates=True)
# 读取月度贸易余额数据,同样解析日期索引
df_monthly = pd.read_csv('B.csv', index_col=0, parse_dates=True)

2. 让月度数据和日度数据「对齐」

核心思路是:给日度数据标记它所属的年月,然后把对应年月的月度贸易余额赋值给每一天。我们可以用to_period('M')来提取年月信息:

# 给月度数据添加年月标识(比如"1980-01")
df_monthly['year_month'] = df_monthly.index.to_period('M').astype(str)
# 给日度数据也添加对应的年月标识
df_daily['year_month'] = df_daily.index.to_period('M').astype(str)

3. 映射月度数据到日度行

map方法把月度的贸易余额值映射到日度数据的每一行,然后删掉临时的年月列:

# 把月度贸易余额映射到日度数据的对应行
df_daily['月度贸易余额'] = df_daily['year_month'].map(df_monthly.set_index('year_month')['月度贸易余额'])
# 移除临时的年月辅助列
df_daily.drop('year_month', axis=1, inplace=True)

4. 验证并保存结果

你可以随便挑某一个月份的数据看看,比如df_daily.loc['1980-01'],检查这个月的所有行是不是都有相同的「月度贸易余额」值。确认没问题后,就可以保存成新的CSV了:

# 保存最终的日度数据集
df_daily.to_csv('merged_daily_data.csv')

另一种更简洁的方法:用merge_asof

如果你不想手动处理年月列,也可以用pandas的merge_asof函数,它会自动匹配最近的不晚于日度日期的月度数据:

# 把月度数据的索引转换为当月第一天的时间戳
df_monthly.index = df_monthly.index.to_period('M').to_timestamp()
# 执行合并,direction='backward'确保匹配当前日期所在月份的月度数据
df_merged = pd.merge_asof(df_daily, df_monthly, left_index=True, right_index=True, direction='backward')
# 保存结果
df_merged.to_csv('merged_daily_data.csv')

两种方法都能达到你的需求,选哪个看你习惯~

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

火山引擎 最新活动