[英]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.