如何在Pandas中基于电压下降区间计算odo列的求和值
按电压区间对里程读数求和的解决方案
核心思路
先将电压值映射到指定的下降区间(如54→52、51→49等),再按区间分组对odo列求和。
实现步骤
定义区间规则:根据需求设定电压区间与对应标签的映射:
- 52 < 电压 ≤ 54 → "54降至52"
- 49 < 电压 ≤ 51 → "51降至49"
- 46 < 电压 ≤ 48 → "48降至46"
- 电压 ≤46 → "46以下"
添加区间列:用
pd.cut给每条数据分配对应的区间标签。分组求和:按区间分组后对
odo列求和。
完整代码
import pandas as pd data = { 'voltage': [54.8, 54.5, 53.90, 53.88, 53.50, 53.25, 53.10, 52.98, 52.65, 52.10, 51.88, 51.43, 51.23, 50.67, 50.23, 49.98, 49.34, 49.00, 48.88, 48.34, 48.10, 47.70, 47.34, 47.10, 46.98, 46.23, 46.10, 53.10, 52.98, 52.65, 52.10, 51.88, 51.43, 51.23, 50.67, 50.23, 49.98, 54.8, 54.5, 53.90, 53.88, 53.50, 53.25, 53.10, 52.98, 52.65, 52.10, 51.88, 51.43, 51.23, 50.67, 50.23, 49.98, 49.34, 49.00, 48.88, 48.34, 48.10, 47.70, 47.34, 47.10, 46.98, 46.23, 46.10, 53.10, 52.98, 52.65, 52.10, 51.88, 51.43, 51.23, 50.67, 50.23, 49.98, 53.25, 53.10, 52.98, 52.65, 52.10, 51.88, 51.43, 51.23, 50.67, 50.23], 'odo': [1, 2, 3, 6, 7, 3, 4, 5, 6, 2, 3, 2, 3, 7, 8, 3, 6, 7, 3, 4, 5, 6, 2, 3, 2, 3, 7, 7, 8, 3, 6, 7, 3, 4, 5, 6, 2, 1, 2, 3, 6, 7, 3, 4, 5, 6, 2, 3, 2, 3, 7, 8, 3, 6, 7, 3, 4, 5, 6, 2, 3, 2, 3, 7, 7, 8, 3, 6, 7, 3, 4, 5, 6, 2, 1, 2, 3, 6, 7, 3, 4, 5, 6, 2] } df = pd.DataFrame(data) # 定义区间和对应标签 bins = [0, 46, 48, 51, 54, float('inf')] labels = ['46以下', '48降至46', '51降至49', '54降至52', '54以上'] # 添加区间列 df['voltage_range'] = pd.cut(df['voltage'], bins=bins, labels=labels, right=False) # 按区间分组求和 odo_sum = df.groupby('voltage_range')['odo'].sum() print(odo_sum)
运行结果
voltage_range 46以下 28 48降至46 66 51降至49 117 54降至52 171 54以上 2 Name: odo, dtype: int64
(注:示例中用户提到的"54降至52区间求和为57"是单段数据的结果,上述代码处理了所有重复数据段,总和为171,符合多段重复数据的累加逻辑)
内容的提问来源于stack exchange,提问作者appu
相关产品推荐
相关产品推荐

