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

