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

按Sensor分组计算DataFrame新列及转置的实现方案

问题描述

现有一个以Date为索引的DataFrame,数据结构如下:

DateValueSensor
19/08/20218787A
20/08/20217360A
23/08/202117570A
24/08/202118993A
25/08/202117947A
26/08/202118317A
27/08/202116940A
30/08/202123837A
31/08/202118353A
19/08/202115010B
20/08/202110873B
23/08/20215270B
24/08/202121060B
25/08/202113430B
26/08/20216267B
27/08/202133677B
30/08/20219460B
31/08/20218223B

需要实现以下需求:

  • 按Sensor分组计算新列Calc,计算公式为:当前Value值 ÷ 5天前的Value值 + 5天前的Value值 ÷ 15天前的Value值,无法计算的位置填充NA。
  • 计算完成后转置DataFrame,以Sensor为索引,日期为列名,Calc值为对应单元格内容。
解决方案

1. 预处理:转换日期索引为datetime类型

首先将字符串格式的日期索引转换为datetime类型,确保移位操作按时间逻辑执行:

import pandas as pd

# 转换索引为datetime格式
df.index = pd.to_datetime(df.index, format='%d/%m/%Y')

2. 分组计算Calc列

使用groupby按Sensor分组,对每组的Value列执行移位和除法运算,自动处理缺失值填充NA:

# 分组计算Calc列
df['Calc'] = df.groupby('Sensor')['Value'].apply(
    lambda x: x.div(x.shift(5)) + x.shift(5).div(x.shift(15))
).reset_index(level=0, drop=True)

注:当前数据中每个传感器的时间跨度仅12天,不存在15天前的记录,因此所有Calc值会显示为NA;若后续有更长时间序列的数据,即可得到有效计算结果。

3. 转置DataFrame

将结果转换为以Sensor为索引、日期为列的结构:

# 转置得到目标格式
result = df.pivot_table(index='Sensor', columns=df.index, values='Calc')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:45:50