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