在多列上聚合时间序列数据

Posted

技术标签:

【中文标题】在多列上聚合时间序列数据【英文标题】:Aggregation of time-series data on multiple columns 【发布时间】:2021-04-02 08:09:16 【问题描述】:
                     rand_val  new_val           copy_time
2020-10-15 00:00:00         7       26 2020-10-15 00:00:00
2020-10-15 00:00:10         8       29 2020-10-15 00:00:10
2020-10-15 00:00:20         1       53 2020-10-15 00:00:20
2020-10-15 00:03:50         6       69 2020-10-15 00:03:50
2020-10-15 00:04:00         3       19 2020-10-15 00:04:00

我正在使用 resample 方法对时间序列进行下采样。我发现在聚合数据上应用函数时无法调用特定列。

假设我想做一些涉及调用列名的操作:

df.resample("1min").apply(lambda x: sum(x.rand_val) if len(x)>1 else 0) 

我收到一个错误:

AttributeError: 'Series' object has no attribute 'rand_val'

如果我对其他变量进行了 groupby,这将是可能的。我猜重采样功能不一样。有什么想法吗?

【问题讨论】:

试试df.resample('1min',on='copy_time').apply(...) 【参考方案1】:

这是一个好问题!当我们对某些列执行groupby 时,每个数据块都被视为一个pandas DataFrame。因此,我们可以像往常一样访问列。但是,在这种resample 的情况下,它是一个系列。

只为rand_val 获取的一种方法是直接传递该系列,如下所示:

df.resample("1min")['rand_val'].apply(lambda x: sum(x) if len(x)>1 else 0) 

我假设您的索引是日期时间格式。否则请使用pd.to_datetime 转换如下:

df.index=pd.to_datetime(df.index)

【讨论】:

【参考方案2】:

使用on=copy_time,我得到以下输出。

a = df.resample('1min',on='copy_time').apply(lambda x: sum(x.rand_val) if len(x)>1 else 0)
print (a)

resample 正在寻找一个必须具有类似日期时间的索引的对象。在你的例子中,我没有看到。传递 copy_time 将处理该数据时间序列。

             org_time  rand_val  new_val           copy_time
0 2020-10-15 00:00:00         7       26 2020-10-15 00:00:00
1 2020-10-15 00:00:10         8       29 2020-10-15 00:00:10
2 2020-10-15 00:00:20         1       53 2020-10-15 00:00:20
3 2020-10-15 00:03:50         6       69 2020-10-15 00:03:50
4 2020-10-15 00:04:00         3       19 2020-10-15 00:04:00


copy_time
2020-10-15 00:00:00    16
2020-10-15 00:01:00     0
2020-10-15 00:02:00     0
2020-10-15 00:03:00     0
2020-10-15 00:04:00     0
Freq: T, dtype: int64

【讨论】:

我的索引是日期时间对象。默认情况下,它看起来对索引进行下采样。

以上是关于在多列上聚合时间序列数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Python/Pandas 中执行不同操作的多列有条件地聚合分组数据

聚合火花数据框中的多列(所有组合)

如何在数据框中聚合具有多列的重复行[重复]

具有多列聚合的 SQL Server 数据透视表

具有多列的数据框的不同聚合

在pandas中聚合多列时如何重置索引