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

如何在Pandas中合并含重复时间窗口列的传感器DataFrame?

Pandas按30秒时间窗口对齐合并多传感器数据

实现思路

核心是给每个时间窗口内的每条数据添加组内序号,用「时间窗口(date) + 组内序号」作为合并键,通过外连接(outer join)实现同窗口内数据按采集顺序对齐,缺失位置自动填充NaN。

具体步骤

1. 为每个数据集添加组内序号

对每个传感器的DataFrame,按date分组后,用cumcount()生成组内递增的序号(代表该窗口内的第n次采集,从0开始计数)。

2. 多表外连接合并

以date和组内序号作为连接键,使用外连接合并所有数据集,确保所有窗口的所有采集位置都被保留,缺失值自动填充为NaN。

代码示例

用你提供的测试数据演示:

import pandas as pd

# 构造测试数据
data1 = { 
    'date': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C', 'C', 'D', 'D', 'D'],
    'value1': list(range(1, 20))
}
data2 = { 
    'date': ['A',  'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C', 'C', 'D', 'D', 'D', 'D', 'D'],
    'value2': list(range(1, 21))
}

# 转为DataFrame并添加组内序号
df1 = pd.DataFrame(data1)
df1['seq'] = df1.groupby('date').cumcount()  # 每个date组内从0开始计数

df2 = pd.DataFrame(data2)
df2['seq'] = df2.groupby('date').cumcount()

# 外连接合并
merged_df = pd.merge(df1, df2, on=['date', 'seq'], how='outer')

# 可选:调整列顺序或删除seq列
merged_df = merged_df[['date', 'value1', 'value2', 'seq']]
print(merged_df)

结果说明

  • 同一date窗口下,seq相同的行对应窗口内的同一采集位置,数据自动对齐
  • 某传感器在窗口内采集条数不足时,缺失的位置会填充NaN(比如date='A'的seq=3行,value2为NaN;date='D'的seq=3/4行,value1为NaN)
  • 中间完整窗口(如B、C)合并后无缺失值

多传感器扩展

如果有3个及以上传感器数据,可使用functools.reduce批量合并:

from functools import reduce

# 假设有df1, df2, df3三个已添加seq列的数据集
dfs = [df1, df2, df3]
merged_df = reduce(lambda left, right: pd.merge(left, right, on=['date', 'seq'], how='outer'), dfs)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:05:20