如何用Pandas对无线电信号采样CSV进行1秒分辨率下采样?
Pandas实现每行每4列取均值(降低时间采样分辨率)
完全可以用Pandas实现每行按连续4列分组取均值,正好匹配你从0.25秒/列降到1秒/列的需求,核心思路是通过groupby对列进行分组,再计算每组均值:
核心代码实现
方法1:列名为连续数字时(比如你的列是0到3599)
# 假设你的数据已读入为DataFrame df df_resampled = df.groupby(lambda col: col // 4, axis=1).mean()
方法2:通用适配(不管列名是什么格式)
如果列名不是连续数字(比如是时间字符串),可以用列的位置索引来分组:
import numpy as np df_resampled = df.groupby(np.arange(len(df.columns)) // 4, axis=1).mean()
原理说明
np.arange(len(df.columns)) // 4会生成一组分组键:前4列对应键0,接下来4列对应键1,以此类推,正好把每4个0.25秒的采样列合并为1个1秒的采样列axis=1指定按列方向分组,对每组内的列计算均值,最终每行会得到900个结果(3600÷4=900),完全符合1秒/列的分辨率要求
小例子验证
可以用测试数据快速验证效果:
import pandas as pd import numpy as np # 构造2行8列的测试数据(模拟2秒的采样) df = pd.DataFrame(np.arange(16).reshape(2,8), columns=[0,1,2,3,4,5,6,7]) # 分组求均值 df_resampled = df.groupby(lambda col: col//4, axis=1).mean() print(df_resampled)
输出结果:
0 1 0 1.5 5.5 1 9.5 13.5
可见每4列的均值计算正确,完全符合预期。
内容的提问来源于stack exchange,提问作者M1ctl4nt3cutl1
相关产品推荐
相关产品推荐

