簡體   English   中英

在 dataframe 中循環,日期和日期之間在 python

[英]cycle in a dataframe with dates and between dates in python

我想處理更改日期的兩個日期之間的所有數據。 特別是,我有以下dataframe:

                   real    model2      model1
date                                               
2017-01-01 00:00:00   51.22   52.776425   52.583711
2017-01-01 01:00:00   53.00   47.211506   50.679937
2017-01-01 02:00:00   52.00   44.722529   48.478772
2017-01-01 03:00:00   51.00   42.475170   45.141708
2017-01-01 04:00:00   47.27   38.862827   44.583250
2017-01-01 05:00:00   45.49   39.473972   44.930338
2017-01-01 06:00:00   45.69   42.465659   47.380179

其中日期也是索引。 我想每天在一個列表中收集所有數據以傳遞給 function。 我以一種不聰明\正確的方式完成了它:

for iday in range(1,9):
   #
   #
   start_date = '2017-01-0'+str(iday)+ ' 00:00:00'
   end_date   = '2017-01-0'+str(iday)+ ' 23:00:00'
   #
   data_sub_e = EE.loc[start_date:end_date]

聽起來不正確,很難擴展到大於 10 的天數,而且似乎不使用 pandas 功能。

有什么聰明的方法可以做到這一點嗎?

提前致謝,

迭戈

我假設datedatetime類型(不是string )。

使用df.index.date您可以僅按日期部分select 行。

例如:

d1 = pd.to_datetime('2017-01-01')  # The criterion date
df[df.index.date == d1]   # Get all rows from this date, whatever the hour part

另一個提示:而不是基於天數的循環:

for iday in range(1,9):

運行基於pd.date_range的循環,例如:

for dat in pd.date_range('2017-01-01', '2017-01-15', freq='D'):

當然,根據您的需要設置結束日期。

另一種選擇是按索引的日期部分對 DataFrame 進行分組:

df.groupby(pd.Grouper(freq='D'))

然后將您的 function 應用於每個組。

按照評論編輯

要將您的值更改為列表,對於每個組,您可以使用命名聚合

df.groupby(pd.Grouper(freq='D')).agg({'real': list,
    'model1': list, 'model2': list})

如果要分配自己的列名,可以使用另一種語法,帶有命名參數:

df.groupby(pd.Grouper(freq='D')).agg(Real=('real', list),
    Model_1=('model1', list), Model_2=('model2', list))

此處參數名稱指定 output 列名稱。 每個參數的值是一個元組:(原始列名聚合 function )。

暫無
暫無

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

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