如何将60分钟的数据点划分为15分钟?

时间:2019-08-15 09:12:25

标签: python pandas

我有一个每60分钟间隔值的数据集。现在,我想使用这两个小时值之间的平均值将它们分为15分钟间隔。我该怎么办?

Time                 A                    
2016-01-01 00:00:00  1  
2016-01-01 01:00:00  5  
2016-01-01 02:00:00  13

所以,我现在希望它在15分钟的间隔内保持平均值:

Time                      A      
2016-01-01 00:00:00       1
2016-01-01 00:15:00       2   ### at 2016-01-01 00:00:00 values is 1 and
2016-01-01 00:30:00       3   ### at 2016-01-01 01:00:00 values is 5. 
2016-01-01 00:45:00       4   ### Therefore we have to fill 4 values ( 15 mins interval ) 
2016-01-01 01:00:00       5   ### with the average of the hour values.
2016-01-01 01:15:00       7
2016-01-01 01:30:00       9
2016-01-01 01:45:00       11
2016-01-01 02:00:00       13

我尝试用均值重采样15分钟,但是(显然)它不起作用,并且给出了Nan值。谁能帮我吗?怎么做?

3 个答案:

答案 0 :(得分:3)

我只想重采样:df.resample("15min").interpolate("linear")

由于您已经将列Time设置为索引,因此它应该可以直接工作

答案 1 :(得分:3)

我们可以使用resamplereplaceinterpolate一行来完成此操作:

df.resample('15min').sum().replace(0, np.NaN).interpolate()

输出

                        A
Time                     
2016-01-01 00:00:00   1.0
2016-01-01 00:15:00   2.0
2016-01-01 00:30:00   3.0
2016-01-01 00:45:00   4.0
2016-01-01 01:00:00   5.0
2016-01-01 01:15:00   7.0
2016-01-01 01:30:00   9.0
2016-01-01 01:45:00  11.0
2016-01-01 02:00:00  13.0

答案 2 :(得分:2)

您可以这样做:

import pandas as pd

df = pd.DataFrame({
    'Time': ["2016-01-01 00:00:00", "2016-01-01 01:00:00", "2016-01-01 02:00:00"],
    'A': [1 , 5, 13]
})
df['Time'] = pd.to_datetime(df['Time'])
new_idx = pd.DatetimeIndex(start=df['Time'].iloc[0], end=df['Time'].iloc[-1], freq='15min')
df2 = df.set_index('Time').reindex(new_idx).interpolate().reset_index()
df2.rename(columns={'index': 'Time'}, inplace=True)
print(df2)
#                  Time     A
# 0 2016-01-01 00:00:00   1.0
# 1 2016-01-01 00:15:00   2.0
# 2 2016-01-01 00:30:00   3.0
# 3 2016-01-01 00:45:00   4.0
# 4 2016-01-01 01:00:00   5.0
# 5 2016-01-01 01:15:00   7.0
# 6 2016-01-01 01:30:00   9.0
# 7 2016-01-01 01:45:00  11.0
# 8 2016-01-01 02:00:00  13.0

如果您希望结果中的列A为整数,则可以添加以下内容:

df2['A'] = df2['A'].round().astype(int)