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

Pandas筛选到匹配日期值时如何提取对应整行的关联信息

解决方法

你原有的写法将所有日期列的元素拼接为独立列表,直接丢失了日期与原行的关联信息,自然无法同步提取同一行的其他字段。推荐使用pandas宽表转长表的方案实现需求,代码简洁且处理效率更高:

import pandas as pd

# 读取数据
data = pd.read_csv("Book1.csv")

# 自定义配置区域,按你的实际需求调整即可
# 需要检查的日期列:如果只需要检查D_INT开头的列,删掉后面+D_EXT的部分即可
check_date_cols = [f"D_INT_{i}" for i in range(1,7)] + [f"D_EXT_{i}" for i in range(1,7)]
# 需要同步提取的关联字段,比如示例的NAME,或者你数据集里的机构名、地址等都可以加
related_cols = ["NAME"]

# 宽表转长表,每一行对应「原行关联字段+单个日期值」
df_long = data.melt(
    id_vars=related_cols, 
    value_vars=check_date_cols, 
    value_name="date", 
    var_name="date_col"
)

# 转换为日期格式筛选,避免字符串比较的格式误差
df_long["date"] = pd.to_datetime(df_long["date"], errors="coerce")
filter_mask = (df_long["date"] >= "2022-03-01") & (df_long["date"] <= "2024-12-31")
result = df_long.loc[filter_mask, related_cols + ["date"]]

# 按你期望的格式输出
for _, row in result.iterrows():
    print(f"{row['NAME']}, {row['date'].strftime('%Y-%m-%d')}")

# 如果需要存为列表可以用下行代码
# ext = result.apply(lambda x: f"{x['NAME']}, {x['date'].strftime('%Y-%m-%d')}", axis=1).tolist()

调整说明

  • 如果你的所有日期都是标准YYYY-MM-DD格式,可以跳过日期转换步骤直接筛选字符串
  • related_cols可自由增减字段,比如需要同时输出地址就改成["NAME", "ADRESS"]
  • 以你提供的示例数据运行代码,若检查所有D_INT和D_EXT列,输出结果为:
ALEX, 2024-01-01
ALEX, 2023-02-02

如果只检查D_INT列,输出结果为ALEX, 2023-02-02,你可以按需调整检查的列范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:36:03