簡體   English   中英

使用 DatetimeIndex 重新采樣 DataFrame 並保持日期范圍

[英]Resample DataFrame with DatetimeIndex and keep date range

我的問題可能聽起來微不足道,但我還沒有找到任何解決方案:

當我使用 DatetimeIndex 將 DataFrame 重新采樣為三個月一次的值時,我希望重新采樣的數據保持在與原始數據相同的日期范圍內。

最小的例子:

import numpy as np
import pandas as pd

# data from 2014 to 2016
dim = 8760 * 3 + 24
idx = pd.date_range('1/1/2014 00:00:00', freq='h', periods=dim)
df = pd.DataFrame(np.random.randn(dim, 2), index=idx)

# resample two three months
df = df.resample('3M').sum()
print(df)

屈服

                     0           1
2014-01-31   24.546928  -16.082389
2014-04-30  -52.966507  -40.255773
2014-07-31  -32.580114   47.096810
2014-10-31   -9.501333   12.872683
2015-01-31 -106.504047   45.082733
2015-04-30  -34.230358   70.508420
2015-07-31  -35.916497  104.930101
2015-10-31  -16.780425   17.411410
2016-01-31   68.512994  -43.772082
2016-04-30   -0.349917   27.794895
2016-07-31  -30.408862  -18.182486
2016-10-31  -97.355730 -105.961101
2017-01-31   -7.221361   40.037358

為什么重采樣會超出日期范圍,例如為2017-01-31創建一個條目,我如何防止這種情況發生並保持在原始范圍內,例如在2014-01-012016-12-31之間? 這不應該是從January-March, April-June, ... October-December的預期標准行為嗎?

提前致謝!

您的 DataFrame 有 36 個月。

當您每 3 個月重新采樣時,第一行將包含直到第一個月結束的所有內容,第二行將包含您第二個月和之后 3 個月之間的所有內容,依此類推。 您的最后一行將包含從2016-10-31到 3 個月之后的所有內容,即2017-01-31

如果你願意,你可以把它改成

df.resample('3M', closed='left', label='left').sum()

,給你

2013-10-31   3.705955  25.394287
2014-01-31  38.778872 -12.655323
2014-04-30  10.382832 -64.649173
2014-07-31  66.939190  31.966008
2014-10-31 -39.453572  27.431183
2015-01-31  66.436348  29.585436
2015-04-30  78.731608 -25.150526
2015-07-31  14.493226  -5.842421
2015-10-31  -2.394419  58.017105
2016-01-31 -36.295499 -14.542251
2016-04-30  69.794101  62.572736
2016-07-31  76.600558 -17.706111
2016-10-31 -68.842328 -32.723581

,但第一行將“超出您的范圍”。

如果您每 3 個月重新采樣一次,那么您的第一行將超出您的范圍,或者您的最后一行將超出您的范圍。

編輯

如果您希望 bin 為“前三個月”、“后三個月”等,您可以這樣寫

df.resample('3MS').sum()

,因為這將在每個月的開始而不是結束(參見https://pandas.pydata.org/pandas-docs/stable/timeseries.html#timeseries-offset-aliases

暫無
暫無

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

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