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

如何基于日期条件从另一DataFrame创建新列并匹配异构数据集

解决跨结构数据集合并问题的实操方案

核心思路

先把宽格式的火灾数据集转成「年-月-火灾数」的长格式,再从目标数据集的日期中提取年、月作为匹配键,最后通过年、月关联两个数据集,自动实现重复日期对应重复火灾数的效果。

具体步骤(基于Python Pandas)

1. 转换火灾数据集格式(宽→长)

假设你的火灾数据集是类似这样的宽格式(月份为行,年份为列):

月份202020212022
110158
25712

用melt函数将其转成长格式,方便后续匹配:

import pandas as pd

# 替换成你的火灾数据集读取代码,比如pd.read_excel("fire_data.xlsx")
fire_df = pd.DataFrame({
    "月份": [1, 2, 3],
    "2020": [10, 5, 8],
    "2021": [15, 7, 10],
    "2022": [8, 12, 15]
})

# 宽转长,生成年份、月份、火灾数三列
fire_long = fire_df.melt(
    id_vars="月份",
    var_name="年份",
    value_name="nr_total_queimadas"
)
# 将年份转为整数类型,避免字符串匹配问题
fire_long["年份"] = fire_long["年份"].astype(int)

2. 从目标数据集提取匹配键

从data_medicao列中提取年、月,作为和火灾数据集关联的依据:

# 替换成你的目标数据集读取代码
target_df = pd.DataFrame({
    "data_medicao": ["2020-01-05", "2020-01-10", "2021-02-03", "2022-03-15"]
})

# 解析日期并提取年、月
target_df["年份"] = pd.to_datetime(target_df["data_medicao"]).dt.year
target_df["月份"] = pd.to_datetime(target_df["data_medicao"]).dt.month

3. 合并两个数据集

通过merge函数按年、月关联,自动为每个重复日期匹配对应火灾数:

# 左连接保留目标数据集的所有行,即使没有对应火灾数据也会显示NaN
result_df = pd.merge(
    target_df,
    fire_long,
    on=["年份", "月份"],
    how="left"
)

# 清理中间生成的年份、月份列(按需保留)
result_df = result_df.drop(["年份", "月份"], axis=1)

为什么不用循环?

Pandas的内置函数(melt/merge)是为批量数据处理优化的,效率远高于手动循环,且能避免循环中容易出现的索引错误、匹配遗漏问题,完全满足你「重复日期对应重复火灾数」的需求。

如果你的数据集有特殊格式(比如月份是英文缩写、日期格式不规范),可以调整日期解析参数,比如用pd.to_datetime(..., format="%Y-%b-%d")来适配英文月份。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:10:32