簡體   English   中英

對 python pandas 中的多變量數據重新采樣 timedelta

[英]Resampling timedelta for multivariate data in python pandas

Pandas 還是新手:

我有一些數據(df)是不同人及其變量的時間序列數據。

dataframe 看起來像這樣:

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

對於我正在嘗試創建 dataframe 的每個人,其中:

  • 索引是日期之間的時間增量(以天為單位)
  • 對於每個人的觀測值都進行了上采樣,因此每個人的觀測值具有相同的長度,介於 -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)或如何處理多個觀察結果。

非常感謝指點,謝謝。

一、准備完整的人員名單和感興趣的天差

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]

最后,根據需要取平均值,我們首先按persondate_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)

暫無
暫無

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

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