Pandas数据帧在每第n行重新采样

nom*_*-ir 4 pandas

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

我打算重新采样数据帧,以便如果数据集通过一定的大小,我将重新采样它,因此最终只有SIZE_LIMIT行数.这意味着我需要过滤数据帧,以便每个n = actual_size/SIZE_LIMIT行聚合到新数据帧中的单个行.聚合可以是平均值,也可以是按原样排列的第n行.

我并不完全熟悉大熊猫,所以可能错过了一些明显的手段.

hel*_*ker 12

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

例如,对于计算机屏幕,一种天真的方法是计算您的间隔中有多少个点,以及您可用的像素数.因此,为了在1000像素宽度的窗口中绘制具有10000个点的数据帧,使用此语法获取STEP为10的切片(whole_data将仅用于示例的1D数组):

data_to_plot = whole_data[::10]
Run Code Online (Sandbox Code Playgroud)

这可能具有不期望的效果,特别是掩盖可能从切片操作"逃避"的短峰.另一种方法是将数据拆分为箱,然后为每个箱计算一个数据点(例如,最大值).我觉得由于numpy/pandas高效的数组操作,这些操作实际上可能很快.

希望这可以帮助!


Zel*_*ny7 5

您可以pandas.qcut在索引上使用该方法将索引分成相等的分位数.您传递给的值qcut可能是actual_size/SIZE_LIMIT.

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
Run Code Online (Sandbox Code Playgroud)

在这里,通过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
Run Code Online (Sandbox Code Playgroud)