Pandas 還是新手:
我有一些資料(df)是不同人及其變數的時間序列資料。
資料框如下所示:
date1 date2 person var1 var2
2016-01-04 12:56:00 2016-01-05 00:00:00 1 100 200
2016-01-04 15:11:00 2016-01-05 00:00:00 1 110 120
2016-01-06 18:05:00 2016-01-06 00:00:00 2 220 300
2016-01-07 18:59:00 2016-01-07 00:00:00 2 200 100
2016-01-02 19:30:00 2016-01-02 00:00:00 3 400 500
對于每個人,我都在嘗試創建一個資料框,其中:
- 索引是日期之間的時間增量(以天為單位)
- 對于每個人的觀測值都進行了上采樣,因此每個人的觀測值具有相同的長度,介于 -5 到 5 天之間。
- 對于同一天收集的觀察結果,取變數的平均值
- 缺失值用 0 填充
所以它看起來像這樣:
days person var1 var2
-5 1 0 0
-4 1 0 0
-3 1 0 0
-2 1 0 0
-1 1 X X
0 1 Y Y
...
-5 2 0 0
-4 2 0 0
etc
我嘗試使用 timedelta 索引,使用 groupby('person') 并重新采樣,但我不知道如何為每個人獲取指定的日期范圍(-5 到 5)或如何處理多個觀察結果。
非常感謝指點,謝謝。
uj5u.com熱心網友回復:
一、準備完整的人員名單和感興趣的天差
persons = df['person'].unique()
date_diffs = np.arange(-5,6)
然后,為您的“上采樣”構建所有可能組合的串列。
person_date_diff_combos = [(person, date_diff) for person in persons for date_diff in date_diffs]
最后,根據需要取平均值,我們首先按person和 對資料進行分組date_diff,取兩個變數的平均值,然后reindex創建缺失的行,最后用零填充缺失的行。
df = df.groupby([
'person',
(df['date2'] - df['date1']).dt.days.rename('date_diff'),
])\
[['var1', 'var2']].mean()\
.reindex(person_date_diff_combos, axis=0)\
.fillna(0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/421494.html
標籤:
上一篇:查找行的最小和最大日期時間
