Python 熊猫-从24小时数据的最后一分钟选择数据

Python 熊猫-从24小时数据的最后一分钟选择数据,python,pandas,dataframe,time-series,Python,Pandas,Dataframe,Time Series,熊猫是这里的初学者 我有一个以分钟为单位的24小时时间序列,在a列中有一个累积值: Time Energy 11-01-2017 10:14 19.14634168 11-01-2017 10:15 19.14702618 11-01-2017 10:16 19.14719065 11-01-2017 10:17 19.14719065 … 11-01-2017 23:56 19.47694149 11-01-2017 23:57

熊猫是这里的初学者

我有一个以分钟为单位的24小时时间序列,在a列中有一个累积值:

Time                Energy
11-01-2017 10:14    19.14634168
11-01-2017 10:15    19.14702618
11-01-2017 10:16    19.14719065
11-01-2017 10:17    19.14719065
…   
11-01-2017 23:56    19.47694149
11-01-2017 23:57    19.4771605
11-01-2017 23:58    19.47753776
11-01-2017 23:59    19.47801377
我想知道每小时结束时A列的值是多少(dd-mm-yyy-hh:59),并将此数据保存在csv文件中,添加一个额外的列以显示小时。结果如下所示:

   Time             Hour  Energy
   11-01-2017 00:59    1     02.0000000
   11-01-2017 01:59    2     04.1234554
   11-01-2017 02:59    3     06.1234554
   ...
   11-01-2017 23:59    24    19.4780137
我应该基于秒值59迭代时间序列,还是更容易每60行提取列A中的值,因为总是有1440行(1440分钟)?

您可以使用:

df.Time = pd.to_datetime(df.Time)
df['hour'] = df.Time.dt.hour + 1
df1 = df[df.Time.dt.minute == 59]

print (df1)
                 Time     Energy  hour
7 2017-11-01 23:59:00  19.478014    24

如果您的时间值是规则的,没有间隙,如您所说,您可以将切片语义与步骤arg结合使用:

df.iloc[::60]
如果第一个条目不是第一分钟,如您所示,则只需偏移第一个参数:

df.iloc[45::60]
因为第14分钟比第59分钟差45分

计时

In [176]:
s = pd.date_range(dt.datetime(2016,1,1), freq='1min', periods=10000)
s

Out[176]:
DatetimeIndex(['2016-01-01 00:00:00', '2016-01-01 00:01:00',
               '2016-01-01 00:02:00', '2016-01-01 00:03:00',
               '2016-01-01 00:04:00', '2016-01-01 00:05:00',
               '2016-01-01 00:06:00', '2016-01-01 00:07:00',
               '2016-01-01 00:08:00', '2016-01-01 00:09:00',
               ...
               '2016-01-07 22:30:00', '2016-01-07 22:31:00',
               '2016-01-07 22:32:00', '2016-01-07 22:33:00',
               '2016-01-07 22:34:00', '2016-01-07 22:35:00',
               '2016-01-07 22:36:00', '2016-01-07 22:37:00',
               '2016-01-07 22:38:00', '2016-01-07 22:39:00'],
              dtype='datetime64[ns]', length=10000, freq='T')

In [179]:    
%timeit s[s.minute == 59]
%timeit s[::60]

1000 loops, best of 3: 639 µs per loop
10000 loops, best of 3: 27.5 µs per loop

所以这里的切片速度快了约20倍

谢谢。。。我很难添加“小时”列。问题是该列实际上没有命名为“Time”;它是空白/索引列。你是如何引用它的?使用“Index”而不是“Time”?准确地说,并删除
dt
-
df['hour']=df.Index.hour+1
如果我只想获得最后一分钟的数据怎么办。。。。很有趣,谢谢。我使用了这个切片和上面jezrael对解决方案的建议的组合。@这取决于这里索引的形式,在这里你有规则的值,那么切片速度更快,但另一个解决方案在寻找相等值时会起作用