如何使用熊猫按 10 分钟对时间序列进行分组

Posted

技术标签:

【中文标题】如何使用熊猫按 10 分钟对时间序列进行分组【英文标题】:How to groupby time series by 10 minutes using pandas 【发布时间】:2015-11-15 19:20:50 【问题描述】:

有一个由 DatatimeIndex 索引的时间序列(ts),想按 10 分钟分组

index   x  y  z

ts1     ....
ts2     ....
...

我知道如何按 1 分钟分组

def group_by_minute(timestamp):
    year = timestamp.year
    month = timestamp.month
    day = timestamp.day
    hour = timestamp.hour
    minute = timestamp.minute
    return datetime.datetime(year, month, day, hour, minute)

然后

ts.groupby(group_by_minute, axis=0)

我的自定义函数(大致)

def my_function(group):
    first_latitude = group['latitude'].sort_index().head(1).values[0]
    last_longitude = group['longitude'].sort_index().tail(1).values[0]
    return first_latitude - last_longitude

所以 ts DataFrame 肯定应该包含 'latitude' 和 'longitude' 列

使用 TimeGrouper 时

   ts.groupby(pd.TimeGrouper(freq='100min')).apply(my_function)

我收到以下错误,

TypeError: cannot concatenate a non-NDFrame object

【问题讨论】:

你试过resample吗?例如。 df.resample('1min', 'mean')你在做什么聚合 @JoeCondron 我正在使用 APPLY 函数应用自定义函数。在我看来, resample 或 TimeGrouper 会自动填补空白,即使有一年的时间间隔。有没有办法防止这种情况?非常感谢 您可以传递您的自定义函数,例如:df.resample('10min', how=my_func)。除非你告诉它,否则它不会填补空白。也许您应该发布要传递的功能和所需的输出。或者,您可以将函数的最后一行调整为 minute = 10 * (minute / 10) @JoeCondron 感谢您的建议。我已经切换到重新采样,它几乎可以工作。仅 resample 获取 df 的第一列,它是否同时适用于 df 的多个列?我会将我的功能重新编辑到问题中。再次感谢 【参考方案1】:

我知道这是旧的,但 pd.Grouper() 也会完成这个:

agg_10m = df.groupby(pd.Grouper(freq='10Min')).aggregate(numpy.sum)

【讨论】:

现在是 Grouper,因为旧的已弃用。【参考方案2】:

这种事情有一个pandas.TimeGrouper,你描述的会是这样的:

agg_10m = df.groupby(pd.TimeGrouper(freq='10Min')).aggregate(numpy.sum) #or other function

【讨论】:

感谢您的回复。似乎 pd.TimeGrouper 确实存在,但这里没有记录pandas.pydata.org/pandas-docs/stable/api.html 哎呀,你是对的。永远不要注意到它是无证的。 通过应用 TimeGrouper 获得“TypeError: cannot concatenate a non-NDFrame object” TimeGrouper 有一定的记录——它在食谱中 pandas.pydata.org/pandas-docs/stable/cookbook.html#resampling 这很奇怪,但它似乎没有被覆盖。 pandas.pydata.org/pandas-docs/stable/… 是时间分组的规范方法;这会创建一个本身不公开的 TimeGrouper

以上是关于如何使用熊猫按 10 分钟对时间序列进行分组的主要内容,如果未能解决你的问题,请参考以下文章

如何按索引级别和值对分组的多索引熊猫系列进行排序?

如何按熊猫中的中值对箱线图进行排序

按 10 分钟间隔对 pandas DataFrame 进行分组[重复]

Pandas:如何按一组序数值对数据框进行分组?

按 15 分钟间隔对 mysql 查询进行分组

如何按中值对熊猫中的箱线图进行排序?