Python Pandas如何筛选最小值落在指定日期范围的列名列表
实现代码
你可以直接用pandas内置方法完成需求,性能和可读性都很好:
import pandas as pd import numpy as np # 生成你给出的测试数据集 np.random.seed(2021) dates = pd.date_range('20130226', periods=90) df = pd.DataFrame(np.random.uniform(0, 10, size=(90, 6)), index=dates, columns=['A_values', 'B_values', 'C_values', 'D_values', 'E_values', 'target']) # 1. 筛选后缀为_values的列 val_df = df.filter(regex='_values$') # 2. 计算每列全局最小值对应的日期(默认取第一个出现最小值的日期) col_min_date = val_df.idxmin() # 3. 判断日期是否落在指定区间,inclusive参数控制区间开闭:'both'左闭右闭、'neither'开区间 date_mask = col_min_date.between('2013-05-01', '2013-05-15', inclusive='both') # 4. 提取符合条件的列名列表 result = col_min_date[date_mask].index.tolist() print(result)
运行结果
使用你给定的随机种子2021运行上述代码,输出为 ['C_values', 'E_values'],即这两列的全局最小值对应的日期都落在2013-05-01至2013-05-15范围内。
特殊场景适配
如果某列存在多个相同的全局最小值,只要有任意一个对应的日期落在指定区间就算符合条件,可以用以下写法:
start = pd.to_datetime('2013-05-01') end = pd.to_datetime('2013-05-15') result = [col for col in val_df.columns if any(val_df.index[val_df[col] == val_df[col].min()].between(start, end))]
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

