You need to enable JavaScript to run this app. pandas 多条件筛选下最旧日期对应my_list值的单行实现方法
优惠活动
大模型
产品
解决方案
定价
更多

pandas 多条件筛选下最旧日期对应my_list值的单行实现方法

Pandas 实现条件筛选后取最早/最晚日期对应值的单行方案

测试数据构造

先准备好通用测试DataFrame,构造代码如下:

import pandas as pd
import numpy as np

df = pd.DataFrame()
df['date'] = pd.date_range("20130101", periods=12) 
df['bol']  = np.array([0,1,1,0,1,1,0,1,1,0,1,1])
df['language'] = np.array(['FR','EN','FR','EN','FR','EN','FR','EN','FR','EN','FR','EN'])
df['doctype'] = np.array(['FAM','SELF','FAM','SELF','FAM','FAM','FAM','SELF','FAM','SELF','FAM','FAM'])
set_claims = [[i,i+1] for i in range(12)]
df['my_list'] = pd.Series(set_claims, index=df.index)

基础筛选规则

首先需要过滤出满足两个条件的行:language字段值为EN、doctype字段值为SELF,对应的基础查询代码为:

df.loc[(df.language=='EN') & (df.doctype=='SELF'), ]

需求与原始实现

需要在上述筛选结果的基础上,进一步只保留date字段取值最旧的行,最终直接获取该行的my_list字段值。
最初的实现采用两行代码,需要先存储中间变量:

oldest = df.loc[(df.language=='EN') & (df.doctype=='SELF'), ].date.min()
df.loc[df.date == oldest,'my_list']

这种写法不够简洁,可替换为更流畅的单行实现方案。

单行优化实现

myval = (df.loc[(df.language=='EN') & (df.doctype=='SELF'),]).sort_values(by='date',ascending=True).head(1)['my_list'].iloc[0]

调整逻辑说明

  • 如果需要获取筛选子集内日期最新的对应条目,只需将sort_values方法的ascending参数调整为False即可
  • 末尾加iloc[0]的作用是直接拿到字段的原始值,不会返回pandas封装的Series对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 00:54:05