簡體   English   中英

聚合多列時間序列數據

[英]Aggregation of time-series data on multiple columns

                     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 對時間序列進行下采樣。 我發現在對聚合數據應用 function 時無法調用特定列。

假設我想做一些涉及調用列名的操作:

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

我得到一個錯誤:

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

如果我對其他一些變量進行了分組,這將是可能的。 我猜重采樣 function 不一樣。 有任何想法嗎?

這是一個很好的問題。當我們對某些列進行分組時,每個數據塊都被視為groupby 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)

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

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

resample正在尋找一個 object ,它必須具有類似日期時間的索引。 在你的例子中,我沒有看到。 傳遞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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM