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

Python处理双日期关联金额字段完成单图表可视化数据预处理

实现方案

用pandas处理即可,核心逻辑是把两类日期+金额的配对数据分别按日期聚合,再用完整连续日期序列关联两个聚合结果,空值补0就可以得到目标表,完整代码如下:

步骤1:导入依赖并构造原始数据

如果你是从本地文件读数据,把构造df_raw的代码替换成pd.read_csv()/pd.read_excel()即可

import pandas as pd

# 构造原始数据表
raw_data = {
    "StartDate": ["5 June", "7 June", "8 june"],
    "start$": [500, 600, 900],
    "EndDate": ["7 June", "10 June", "10 June"],
    "End$": [300, 550, 600]
}
df_raw = pd.DataFrame(raw_data)

步骤2:统一日期格式

解决原始数据中大小写不统一、空格缺失的问题

def format_date(date_str):
    # 自动识别大小写,转成标准日期格式后再输出统一的字符串格式
    dt = pd.to_datetime(date_str, format="%d %B", errors="coerce")
    return dt.strftime("%d %B").lstrip("0")

# 处理两列日期格式
df_raw["StartDate"] = df_raw["StartDate"].apply(format_date)
df_raw["EndDate"] = df_raw["EndDate"].apply(format_date)

步骤3:分别聚合两类金额

# 按开始日期聚合start$
df_start = df_raw.groupby("StartDate", as_index=False)["start$"].sum()
df_start.columns = ["PythonDate", "start$"]

# 按结束日期聚合End$
df_end = df_raw.groupby("EndDate", as_index=False)["End$"].sum()
df_end.columns = ["PythonDate", "End$"]

步骤4:生成完整连续日期序列

# 取所有日期的最大最小值生成连续日期
all_dt = pd.to_datetime(pd.concat([df_raw["StartDate"], df_raw["EndDate"]]), format="%d %B")
date_range = pd.date_range(all_dt.min(), all_dt.max(), freq="D")
# 转成和之前一致的字符串格式
full_dates = date_range.strftime("%d %B").str.lstrip("0").tolist()
df_full = pd.DataFrame({"PythonDate": full_dates})

步骤5:关联数据填充空值

df_result = df_full.merge(df_start, on="PythonDate", how="left")\
                   .merge(df_end, on="PythonDate", how="left")
# 空值替换为0,输出整数格式
df_result = df_result.fillna(0).astype({"start$": "int", "End$": "int"})

运行后输出df_result就是你需要的期望表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:36:04