[英]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.