zoukankan      html  css  js  c++  java
  • Python数据分析(三)pandas resample 重采样

    下方是pandas中resample方法的定义,帮助文档http://pandas.pydata.org/pandas-docs/stable/timeseries.html#resampling中有更加详细的解释。


    def resample(self, rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start', kind=None, loffset=None, limit=None, base=0, on=None, level=None): """ Convenience method for frequency conversion and resampling of time series. Object must have a datetime-like index (DatetimeIndex, PeriodIndex, or TimedeltaIndex), or pass datetime-like values to the on or level keyword.(数据重采样和频率转换,数据必须有时间类型的索引列) Parameters ---------- rule : string the offset string or object representing target conversion(代表目标转换的偏移量) axis : int, optional, default 0(操作的轴信息) closed : {'right', 'left'} Which side of bin interval is closed. The default is 'left' for all frequency offsets except for 'M', 'A', 'Q', 'BM', 'BA', 'BQ', and 'W' which all have a default of 'right'.(哪一个方向的间隔是关闭的,) label : {'right', 'left'} Which bin edge label to label bucket with. The default is 'left' for all frequency offsets except for 'M', 'A', 'Q', 'BM', 'BA', 'BQ', and 'W' which all have a default of 'right'.(区间的哪一个方向的边界标签保留) convention : {'start', 'end', 's', 'e'} For PeriodIndex only, controls whether to use the start or end of `rule` kind: {'timestamp', 'period'}, optional Pass 'timestamp' to convert the resulting index to a ``DateTimeIndex`` or 'period' to convert it to a ``PeriodIndex``. By default the input representation is retained. loffset : timedelta Adjust the resampled time labels base : int, default 0 For frequencies that evenly subdivide 1 day, the "origin" of the aggregated intervals. For example, for '5min' frequency, base could range from 0 through 4. Defaults to 0 on : string, optional For a DataFrame, column to use instead of index for resampling. Column must be datetime-like. .. versionadded:: 0.19.0 level : string or int, optional For a MultiIndex, level (name or number) to use for resampling. Level must be datetime-like. .. versionadded:: 0.19.0 Returns ------- Resampler object Notes ----- See the `user guide <http://pandas.pydata.org/pandas-docs/stable/timeseries.html#resampling>`_ for more. To learn more about the offset strings, please see `this link <http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases>`__. Examples -------- Start by creating a series with 9 one minute timestamps.(新建频率为1min的时间序列) >>> index = pd.date_range('1/1/2000', periods=9, freq='T') >>> series = pd.Series(range(9), index=index) >>> series 2000-01-01 00:00:00 0 2000-01-01 00:01:00 1 2000-01-01 00:02:00 2 2000-01-01 00:03:00 3 2000-01-01 00:04:00 4 2000-01-01 00:05:00 5 2000-01-01 00:06:00 6 2000-01-01 00:07:00 7 2000-01-01 00:08:00 8 Freq: T, dtype: int64 Downsample the series into 3 minute bins and sum the values of the timestamps falling into a bin.(下采样为三分钟) >>> series.resample('3T').sum() 2000-01-01 00:00:00 3 2000-01-01 00:03:00 12 2000-01-01 00:06:00 21 Freq: 3T, dtype: int64 Downsample the series into 3 minute bins as above, but label each bin using the right edge instead of the left. Please note that the value in the bucket used as the label is not included in the bucket, which it labels. For example, in the original series the bucket ``2000-01-01 00:03:00`` contains the value 3, but the summed value in the resampled bucket with the label ``2000-01-01 00:03:00`` does not include 3 (if it did, the summed value would be 6, not 3). To include this value close the right side of the bin interval as illustrated in the example below this one. >>> series.resample('3T', label='right').sum()(保留间隔的右侧标签,上一个结果是左侧标签) 2000-01-01 00:03:00 3 2000-01-01 00:06:00 12 2000-01-01 00:09:00 21 Freq: 3T, dtype: int64 Downsample the series into 3 minute bins as above, but close the right side of the bin interval.(降采样为3分钟) >>> series.resample('3T', label='right', closed='right').sum() 2000-01-01 00:00:00 0 2000-01-01 00:03:00 6 2000-01-01 00:06:00 15 2000-01-01 00:09:00 15 Freq: 3T, dtype: int64 Upsample the series into 30 second bins.(生采样为30秒) >>> series.resample('30S').asfreq()[0:5] #select first 5 rows 2000-01-01 00:00:00 0.0 2000-01-01 00:00:30 NaN 2000-01-01 00:01:00 1.0 2000-01-01 00:01:30 NaN 2000-01-01 00:02:00 2.0 Freq: 30S, dtype: float64 Upsample the series into 30 second bins and fill the ``NaN`` values using the ``pad`` method.(向前0阶保持) pad/ffill:用前一个非缺失值去填充该缺失值
    backfill/bfill:用下一个非缺失值填充该缺失值
            >>> series.resample('30S').pad()[0:5]
            2000-01-01 00:00:00    0
            2000-01-01 00:00:30    0
            2000-01-01 00:01:00    1
            2000-01-01 00:01:30    1
            2000-01-01 00:02:00    2
            Freq: 30S, dtype: int64
    
            Upsample the series into 30 second bins and fill the
            ``NaN`` values using the ``bfill`` method.(向后0阶保持)
    
            >>> series.resample('30S').bfill()[0:5]
            2000-01-01 00:00:00    0
            2000-01-01 00:00:30    1
            2000-01-01 00:01:00    1
            2000-01-01 00:01:30    2
            2000-01-01 00:02:00    2
            Freq: 30S, dtype: int64
    
            Pass a custom function via ``apply``
    
            >>> def custom_resampler(array_like):
            ...     return np.sum(array_like)+5
    
            >>> series.resample('3T').apply(custom_resampler)
            2000-01-01 00:00:00     8
            2000-01-01 00:03:00    17
            2000-01-01 00:06:00    26
            Freq: 3T, dtype: int64
    
            For a Series with a PeriodIndex, the keyword `convention` can be
            used to control whether to use the start or end of `rule`.
    
            >>> s = pd.Series([1, 2], index=pd.period_range('2012-01-01',
                                                            freq='A',
                                                            periods=2))
            >>> s
            2012    1
            2013    2
            Freq: A-DEC, dtype: int64
    
            Resample by month using 'start' `convention`. Values are assigned to
            the first month of the period.
    
            >>> s.resample('M', convention='start').asfreq().head()
            2012-01    1.0
            2012-02    NaN
            2012-03    NaN
            2012-04    NaN
            2012-05    NaN
            Freq: M, dtype: float64
    
            Resample by month using 'end' `convention`. Values are assigned to
            the last month of the period.
    
            >>> s.resample('M', convention='end').asfreq()
            2012-12    1.0
            2013-01    NaN
            2013-02    NaN
            2013-03    NaN
            2013-04    NaN
            2013-05    NaN
            2013-06    NaN
            2013-07    NaN
            2013-08    NaN
            2013-09    NaN
            2013-10    NaN
            2013-11    NaN
            2013-12    2.0
            Freq: M, dtype: float64
    
            For DataFrame objects, the keyword ``on`` can be used to specify the
            column instead of the index for resampling.
    
            >>> df = pd.DataFrame(data=9*[range(4)], columns=['a', 'b', 'c', 'd'])
            >>> df['time'] = pd.date_range('1/1/2000', periods=9, freq='T')
            >>> df.resample('3T', on='time').sum()
                                 a  b  c  d
            time
            2000-01-01 00:00:00  0  3  6  9
            2000-01-01 00:03:00  0  3  6  9
            2000-01-01 00:06:00  0  3  6  9
    
            For a DataFrame with MultiIndex, the keyword ``level`` can be used to
            specify on level the resampling needs to take place.
    
            >>> time = pd.date_range('1/1/2000', periods=5, freq='T')
            >>> df2 = pd.DataFrame(data=10*[range(4)],
                                   columns=['a', 'b', 'c', 'd'],
                                   index=pd.MultiIndex.from_product([time, [1, 2]])
                                   )
            >>> df2.resample('3T', level=0).sum()
                                 a  b   c   d
            2000-01-01 00:00:00  0  6  12  18
            2000-01-01 00:03:00  0  4   8  12
  • 相关阅读:
    OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能
    OsharpNS轻量级.net core快速开发框架简明入门教程-代码生成器的使用
    一起创业吧:兼职程序员接单平台
    .NET、PHP、MySql、JS中的时间戳你每次是手写还是复制?这篇文章让你一次性搞懂
    .NET和PHP程序员如何通过技术快速变现
    .NET程序员我是如何通过一个产品在2年内买车买房
    .NET方法无限传参数技术
    .NET 增加扩展方法
    毕业10年总结与2019展望
    jQuery 1.9/2.0/2.1及其以上 on 无效的解决办法
  • 原文地址:https://www.cnblogs.com/jinqier/p/9280813.html
Copyright © 2011-2022 走看看