簡體   English   中英

滾動時間窗口功能 — 使用 Pandas 進行數據整理

[英]Rolling Time-Window Features — Data Wrangling with Pandas

我有一個數據集,其中每條記錄都包含匹配級別的數據,例如 MATCH_DATE | 播放器1 | 播放器2 | 錦標賽 | 表面 | PLAYER1_SERVE% | PLAYER2_SERVE%

2020 年 12 月 9 日 | 邁克 | 吉姆 | 羅馬公開賽 | 粘土 | 65% | 70%

我正在嘗試創建基於每個“PLAYER AND SURFACE”的滾動時間窗口的新列,例如 LAST90DAYS_PLAYER1_CLAYSERVE% 和 LAST5MATCHES_PLAYER1_CLAYSERVE%。 請注意,這兩個字段應針對主題記錄中指定的相同 SURFACE。

然后,我需要將這些新列添加/追加到原始數據集中,以得到最終數據集,如 DATE | 播放器1 | 播放器2 | 錦標賽 | 表面 | PLAYER1_SERVE% | PLAYER2_SERVE% | LAST90DAYS_PLAYER1_CLAYSERVE% | LAST5MATCHES_PLAYER1_CLAYSERVE%

2020 年 12 月 9 日 | 邁克 | 吉姆 | 羅馬公開賽 | 粘土 | 65% | 70% | 62.5% | 69.2%

是否有一個優雅的 Pandas 命令可以為每行數據計算這種基於時間窗口的統計/特征? 或者我是否需要使用適當的循環加上 if/then-else 邏輯從頭開始編寫 Python function ?

我對 SQL 有更多的經驗,所以我傾向於發出多個“分組依據”查詢來分別計算每個新列並連接一堆表,最后到達最終表/數據集。 因此,這是一個多步驟的過程,而不是帶有內置循環的優雅的單行 Pandas 代碼。

提前致謝!

您可以使用pandas.DataFrame.rolling方法。 查看文檔

舉個例子,假設您正在使用 Apple 股票價格時間序列。 下面是計算 5 天平均值的代碼的樣子。 當然,您可以鏈接其他指標,例如總和或標准差:

>>> aapl = data[['AAPL']].copy()
>>> aapl
                  AAPL
Date                  
2010-01-04   30.572857
2010-01-05   30.625713
2010-01-06   30.138571
2010-01-07   30.082857
2010-01-08   30.282858
                ...
2018-12-25  152.000000
2018-12-26  157.169998
2018-12-27  156.149994
2018-12-28  156.229996
2018-12-31  156.229996
[2346 rows x 1 columns]

>>> aapl['mean_5d'] = aapl.loc[:, ['AAPL']].rolling(5).mean()
>>> aapl
                  AAPL     mean_5d
Date                              
2010-01-04   30.572857         NaN
2010-01-05   30.625713         NaN
2010-01-06   30.138571         NaN
2010-01-07   30.082857         NaN
2010-01-08   30.282858   30.340571
                ...         ...
2018-12-25  152.000000  153.456000
2018-12-26  157.169998  152.712000
2018-12-27  156.149994  152.575998
2018-12-28  156.229996  153.675998
2018-12-31  156.229996  155.555997
[2346 rows x 2 columns]

>>> aapl['std_5d'] = aapl.loc[:, ['AAPL']].rolling(5).std()
>>> aapl
                  AAPL     mean_5d    std_5d
Date                                        
2010-01-04   30.572857         NaN       NaN
2010-01-05   30.625713         NaN       NaN
2010-01-06   30.138571         NaN       NaN
2010-01-07   30.082857         NaN       NaN
2010-01-08   30.282858   30.340571  0.247898
                ...         ...       ...
2018-12-25  152.000000  153.456000  5.479579
2018-12-26  157.169998  152.712000  4.355022
2018-12-27  156.149994  152.575998  4.202209
2018-12-28  156.229996  153.675998  4.316487
2018-12-31  156.229996  155.555997  2.031717
[2346 rows x 3 columns]

我希望這可以幫助您使用 pandas 庫編寫更高效的代碼!

暫無
暫無

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

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