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

如何根据pandas DataFrame的日期列条件执行对应合并逻辑并输出结果

Pandas按日期条件分逻辑处理并合并数据实现方案

首先提前将Date字段转换为datetime类型,避免字符串格式不一致导致比较逻辑异常,再拆分数据集分别处理后拼接即可,优化后代码如下:

import pandas as pd

# --------------- 前置准备:示例数据(你已有可跳过)---------------
DF = pd.DataFrame(
    {"Date": ["2021-10-01", "2021-10-02", "2021-10-03"], "List": ["A0", "A1", "A2"],
     "Status": ["B0", "B1", "B2"], "Type": ["E", "S", "S"]}
)
List = pd.DataFrame(
    { "List": ["A0", "A1", "A2"],"Type_List": ["E", "S", "S"]}
)
Status = pd.DataFrame(
    { "Status": ["B0", "B1", "B2"],"Type_Status": ["E", "S", "S"]}
)

# --------------- 核心逻辑 ---------------
# 1. 转换日期类型,拆分数据集
DF['Date'] = pd.to_datetime(DF['Date'])
# 拆分两个子集:小于2021-10-01、大于2021-10-01,等于日期的行可按需调整条件分配归属
df_before = DF[DF['Date'] < '2021-10-01'].copy()
df_after = DF[DF['Date'] > '2021-10-01'].copy()

# 2. 处理小于2021-10-01的数据
if not df_before.empty:
    # 用merge替代反复set_index+join,逻辑更清晰
    df_before = df_before.merge(Status[Status['Type_Status'] == 'E'], on='Status', how='left')
    df_before = df_before.merge(List.drop_duplicates(), on='List', how='left')
    df_before['Type'] = df_before['Type_Status'].fillna(df_before['Type_List'])
    # 可按需删除中间生成的冗余列
    # df_before.drop(columns=['Type_Status', 'Type_List'], inplace=True)

# 3. 处理大于2021-10-01的数据
if not df_after.empty:
    df_after = df_after.merge(Status, on='Status', how='left')
    df_after['Type'] = df_after['Type_Status']
    # 同样可按需删除冗余列
    # df_after.drop(columns=['Type_Status'], inplace=True)

# 4. 拼接结果得到最终表
final_df = pd.concat([df_before, df_after], ignore_index=True)

优化点说明

  • 替换原反复重置索引+关联的写法,用merge实现等价逻辑,可读性更强
  • 增加空数据集判断,避免某类日期区间无数据时代码执行报错
  • 提前统一转换日期格式,避免字符串比较时因格式不一致出现逻辑错误
  • 保留原逻辑所有关联规则和字段计算规则,执行结果和原写法完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:15:04