[英]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 功能。
有什么聰明的方法可以做到這一點嗎?
提前致謝,
迭戈
我假設date是datetime類型(不是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.