如何使用Python Pandas按电压周期计算距离总和?
按电压周期计算Pandas DataFrame中Distance的总和
问题描述
我有一个包含Voltage(电压)和Distance(距离)列的Pandas DataFrame,数据如下:
import pandas as pd data = { 'Voltage': [52.59, 52.59, 51.01, 51.01, 49.63, 49.63, 54.59, 52.59, 51.01, 51.01, 49.63, 49.63], 'Distance': [0, 0, 2.29, 0, 4.35, 0, 0, 0, 5.00, 0, 4.35, 0] } df = pd.DataFrame(data)
电压数据存在两个周期:第一个周期从52.59开始到49.63结束,第二个周期从54.59开始到49.63结束。需要分别计算每个周期内的Distance总和,预期结果为第一个周期6.64、第二个周期9.35。
解决方案
核心思路是先给每行数据标记所属周期,再按周期分组求和,具体步骤如下:
1. 标记周期起始点
通过电压值判断每个周期的起始位置:
- 第一个周期起始为序列开头的52.59(或前一行是49.63时的52.59)
- 第二个周期起始为54.59
代码实现:
# 标记周期起始行:电压为54.59,或是52.59且前一行是49.63(含第一行) df['is_cycle_start'] = (df['Voltage'] == 54.59) | \ ((df['Voltage'] == 52.59) & (df['Voltage'].shift(1).fillna(49.63) == 49.63))
2. 生成周期分组ID
对起始点做累积求和,为每个周期分配唯一ID:
df['cycle_id'] = df['is_cycle_start'].cumsum()
3. 按周期分组求和
用groupby按周期ID分组,计算每个周期的Distance总和:
cycle_distance_sum = df.groupby('cycle_id')['Distance'].sum() print(cycle_distance_sum)
运行结果
执行后输出:
cycle_id 1 6.64 2 9.35 Name: Distance, dtype: float64
如果需要直接提取数值,可使用cycle_distance_sum.to_dict()或cycle_distance_sum.values获取。
内容的提问来源于stack exchange,提问作者appu
相关产品推荐
相关产品推荐

