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

如何基于Series阈值筛选Pandas DataFrame行并返回对应索引

问题描述

我正在对44个踏板转动周期(每个周期为长度100的时间序列)中的每个数据点进行序列分析。需要找出**均值偏差DataFrame(形状(44, 100))中,当行内数值低于对应0.25倍标准差阈值Series(形状(44,))**时的索引值,最终输出一个包含44个数值的列表。要求将mean_dev的每一行与sd_quarter的对应值进行比较(注:原描述中“每一列”为表述误差,结合数据结构应为每一行)。

现有代码
# 将(100, 44)的cycles转置为(44, 100),方便计算expanding.mean
transpose_cycles = cycles.transpose()
# 创建空DataFrame存储结果
cumulative_ave = pd.DataFrame()
sd_quarter = pd.DataFrame()
cum_sd = pd.DataFrame()
mean_dev = pd.DataFrame()
# 计算每个踏板周期整个时间序列的累积均值
cumulative_ave = transpose_cycles.expanding().mean()
# 将(100, 1)的mean_cycle转置为(1, 100),方便和cumulative_ave计算
mean_transpose = mean_cycle.transpose()
# 计算均值偏差:平均周期 - 累积均值
mean_dev = mean_cycle - cumulative_ave
# 计算每个踏板周期的标准差
cum_sd = transpose_cycles.std(axis=1)
# 计算0.25倍标准差
sd_quarter = cum_sd*0.25
数据结构信息
  • mean_dev信息:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 44 entries, 0 to 43
Data columns (total 100 columns):
dtypes: float64(100)
  • sd_quarter信息:
<class 'pandas.core.series.Series'>
RangeIndex: 44 entries, 0 to 43
Series name: None
Non-Null Count  Dtype
----------------------------
44 non-null     float64
dtypes: float64(1)
解决方案

以下代码可实现需求,通过矢量化操作高效完成逐行比较,最终生成包含44个数值的列表:

# 逐行比较,获取每行第一个小于对应sd_quarter值的列索引
result = mean_dev.lt(sd_quarter, axis=0).idxmax(axis=1).tolist()

代码说明

  • mean_dev.lt(sd_quarter, axis=0):逐行判断mean_dev的元素是否小于sd_quarter的对应值,返回布尔值DataFrame
  • .idxmax(axis=1):对每行取第一个为True的列索引(True对应数值1,False对应0,idxmax会返回第一个最大值的位置)
  • .tolist():将结果转换为列表,得到包含44个元素的最终输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 23:47:24