【问题标题】:cycle in a dataframe with dates and between dates in python在带有日期的数据框中循环以及在python中的日期之间循环
【发布时间】:2019-11-11 12:15:47
【问题描述】:

我想处理更改日期的两个日期之间的所有数据。特别是,我有以下数据框:

                   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

其中日期也是索引。 我想每天收集列表中的所有数据以传递给函数。我以一种不聪明\正确的方式做到了:

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 功能。

有什么聪明的方法可以做到这一点吗?

提前致谢,

迭戈

【问题讨论】:

  • df.loc[(df['date'] >= 'your_date') & (df['date'] <= 'your_date')] 有什么问题?

标签: python pandas date datetime cycle


【解决方案1】:

我假设 datedatetime 类型(不是 string)。

使用df.index.date,您可以仅按日期部分选择行。

例如:

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'))

然后将你的函数应用到每个组。

在评论后编辑

要将您的值更改为列表,对于每个组,您可以使用 命名聚合

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))

这里的参数名称指定输出列名称。每个人的价值 参数是一个元组:(原始列名聚合函数)。

【讨论】:

  • 我喜欢第一个:只有日期部分。但是,尚不清楚如何将具有该日期的所有值移至列表中。另一种可能性可能是 pd.date_range 并通过循环传递值?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
  • 2017-01-20
相关资源
最近更新 更多