Pandas 每N行对数据帧重新采样一次

Pandas 每N行对数据帧重新采样一次,pandas,Pandas,我有一个脚本,可以将系统日志文件读入数据帧,并从中生成图表。这些图表适用于小数据集。但是,当我面对更大的数据集时,由于数据收集的时间范围更大,图表变得过于拥挤,无法辨别 我计划对数据帧进行重采样,这样,如果数据集通过一定的大小,我将对其进行重采样,以便最终只有行数的大小限制。这意味着我需要过滤数据帧,这样每个n=实际大小/大小限制行将聚合到新数据帧中的一行。agregion可以是平均值,也可以是第n行的原样 我对熊猫不太熟悉,所以可能错过了一些明显的方法 实际上,我认为您不应该修改数据本身,而应

我有一个脚本,可以将系统日志文件读入数据帧,并从中生成图表。这些图表适用于小数据集。但是,当我面对更大的数据集时,由于数据收集的时间范围更大,图表变得过于拥挤,无法辨别

我计划对数据帧进行重采样,这样,如果数据集通过一定的大小,我将对其进行重采样,以便最终只有行数的大小限制。这意味着我需要过滤数据帧,这样每个n=实际大小/大小限制行将聚合到新数据帧中的一行。agregion可以是平均值,也可以是第n行的原样


我对熊猫不太熟悉,所以可能错过了一些明显的方法

实际上,我认为您不应该修改数据本身,而应该在所需的绘图间隔内查看数据。该视图将是要绘制的实际数据点

例如,对于计算机屏幕,一种简单的方法是计算间隔中有多少点,以及有多少像素可用。因此,对于在1000像素宽的窗口中绘制10000个点的数据帧,使用此语法(整个_数据将是一个1D数组,仅用于示例),可以采用一个步长为10的切片:

这可能会产生不期望的效果,特别是掩盖可能从切片操作中“逃逸”的短峰值。另一种方法是将数据拆分为多个存储箱,然后为每个存储箱计算一个数据点(例如,最大值)。我觉得由于numpy/pandas高效的阵列操作,这些操作实际上可能很快


希望这有帮助

您可以使用索引上的
pandas.qcut
方法将索引划分为相等的分位数。传递给
qcut
的值可以是
实际大小/大小限制

In [1]: from pandas import *

In [2]: df = DataFrame({'a':range(10000)})

In [3]: df.head()

Out[3]:
   a
0  0
1  1
2  2
3  3
4  4
这里,通过
qcut(df.index,5)
将索引分组,得到5个相等的分组。然后我取每组的平均值

In [4]: df.groupby(qcut(df.index,5)).mean()

Out[4]:
                       a
[0, 1999.8]        999.5
(1999.8, 3999.6]  2999.5
(3999.6, 5999.4]  4999.5
(5999.4, 7999.2]  6999.5
(7999.2, 9999]    8999.5

谢谢,确实有用。我错过了明显的手术。我会尝试找到一个更优雅的装箱/打包解决方案,但这种细化操作目前还有效。如果你的趋势很慢,并且没有太多尖峰,那么简单的步骤通常就足够了。我处理有噪声的信号,简单的步进有时效果很差。我计划看看一些音频编辑程序的绘图引擎,这些程序具有非常快速的绘图仪导航,例如Audacity。
In [4]: df.groupby(qcut(df.index,5)).mean()

Out[4]:
                       a
[0, 1999.8]        999.5
(1999.8, 3999.6]  2999.5
(3999.6, 5999.4]  4999.5
(5999.4, 7999.2]  6999.5
(7999.2, 9999]    8999.5