在Pandas多索引结构中提取日期索引值的方法
解决方法:直接提取每周Low最小值对应的日期
你完全不需要用for循环逐个查找!Pandas的分组工具已经提供了更高效的方式来实现这个需求,下面是两种简单的方案:
方案1:使用idxmin()直接定位最小值行
idxmin()可以帮你找到每个分组中最小值所在的完整行索引(也就是你的MultiIndex),然后直接用这个索引提取Date1列即可:
# 获取每个week组中Low最小值对应的行索引 week_min_indices = df.groupby('week')['Low'].idxmin() # 通过索引提取对应的Date1日期 week_min_dates = df.loc[week_min_indices, 'Date1']
运行后week_min_dates会是一个Series,索引是week,值就是对应每周Low最小值的Date1日期,示例输出类似:
week 1 2021-01-06 2 2021-01-15 3 2021-01-19 ... 53 2020-12-31 Name: Date1, dtype: datetime64[ns]
方案2:用transform()标记最小值行再筛选
如果你需要同时保留其他列的数据,也可以用transform()给每行标记是否是本组的最小值,再筛选:
# 新增一列标记该行是否是对应week的Low最小值 df['is_week_low_min'] = df['Low'] == df.groupby('week')['Low'].transform('min') # 筛选出所有最小值行并提取Date1 week_min_dates = df[df['is_week_low_min']]['Date1']
这个方法得到的week_min_dates会保留原DataFrame的MultiIndex,你可以用.values转成日期数组、.tolist()转成列表,或者.reset_index(drop=True)去掉索引只保留纯日期值。
为什么你的循环方法返回MultiIndex?
因为df[df['Low'].isin([stuff])]['Date1']返回的是带有原DataFrame完整索引的Series,所以会显示MultiIndex。而上面的两种方法可以直接得到你需要的日期值,无需额外处理循环结果。
内容的提问来源于stack exchange,提问作者Slartibartfast
相关产品推荐
相关产品推荐

