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
相关产品推荐
相关产品推荐

