2016-05-17 91 views
0

我有一系列时间序列的测量数据帧,每隔30分钟加上一个时间戳(yyyy/mm/dd 00:30:00,yyyy/mm/dd 01:00:00等),我只是想通过减少半小时测量来做一个简单的重采样,并保持每小时测量一次即可完成每小时测量。任何建议如何做到这一点。如何通过丢弃每隔一行重新采样一个数据帧(每隔30min测量一次)

+0

你可以做'df.iloc [:2] '但为什么会丢失它们,你可以将索引设置到该列并调用'df.resample('1h')' – EdChum

+0

Hi Ed,df.resample('1h')默认情况下应用mean()想要,我只想要小时行数据。在python 3.5中,.resample被延迟,并且必须使用.resample(....)。mean()。 – IngridM

+0

无论如何感谢.loc [:: 2]完成这项工作 - 简单而有效! – IngridM

回答

0

要放下隔行,保留第一行,使用df.iloc[::2]

要放下隔行,从第二行开始,使用df.iloc[1::2]


或者,由于时间序列,ts,有DatetimeIndex,您可以使用ts.index.minute == 0来选择行,其等于分钟0:

In [146]: ts = pd.Series(1, index=pd.date_range('2000-1-1', periods=10, freq='30T')) 

In [147]: ts 
Out[147]: 
2000-01-01 00:00:00 1 
2000-01-01 00:30:00 1 
2000-01-01 01:00:00 1 
2000-01-01 01:30:00 1 
2000-01-01 02:00:00 1 
2000-01-01 02:30:00 1 
2000-01-01 03:00:00 1 
2000-01-01 03:30:00 1 
2000-01-01 04:00:00 1 
2000-01-01 04:30:00 1 
Freq: 30T, dtype: int64 

In [148]: ts.loc[ts.index.minute == 0] 
Out[148]: 
2000-01-01 00:00:00 1 
2000-01-01 01:00:00 1 
2000-01-01 02:00:00 1 
2000-01-01 03:00:00 1 
2000-01-01 04:00:00 1 
Freq: 60T, dtype: int64 
+0

必须更好的选择,因为它不需要订购DataFrame - 谢谢! – IngridM