我试图弄清楚如何处理周期长度不均匀的熊猫中的时间序列数据。我要看的第一个示例是如何计算最近15天的移动平均值。这是数据示例(时间为UTC)

index   date_time         data
46701   1/06/2016 19:27   15.00
46702   1/06/2016 19:28   18.25
46703   1/06/2016 19:30   16.50
46704   1/06/2016 19:33   17.20
46705   1/06/2016 19:34   18.18


我不确定是否应该只填写数据,以便它甚至以1分钟为单位递增,或者是否有更聪明的方法...如果有人提出建议,将不胜感激

谢谢-KC

最佳答案

你可以做这样的事情。


以您想要的频率重新采样(或下采样)


您必须在这里注意重采样策略。它必须与数据的含义一致。在这里,我可以随意使用bfill(使用下一个有效值的回填),但另一种策略可能更合适,例如ffill(传播最后一个有效值的正向填充)。

计算移动平均线。
也许您将不得不处理索引


注意:rolling的此语法已在pandas 0.18.0中引入。但是,可以使用pd.rolling_mean在以前的版本中执行相同的操作。

# Test data
d = {'data': [15.0, 18.25, 16.5, 17.199999999999999, 18.18],
 'date_time': ['1/06/2016 19:27',
  '1/06/2016 19:28',
  '1/06/2016 19:30',
  '1/06/2016 19:33',
  '1/06/2016 19:34'],
 'index': [46701, 46702, 46703, 46704, 46705]}

df = DataFrame(d)
df['date_time'] = pd.to_datetime(df['date_time'])

# Setting the date as the index
df.set_index('date_time', inplace=True)
# Resampling data
df = df.resample('1T').bfill()
# Performing moving average
df['moving'] = df['data'].rolling(window=3, center=True).mean()
df.plot(y=['data', 'moving'])
df
                      data  index     moving
date_time
2016-01-06 19:27:00  15.00  46701        NaN
2016-01-06 19:28:00  18.25  46702  16.583333
2016-01-06 19:29:00  16.50  46703  17.083333
2016-01-06 19:30:00  16.50  46703  16.733333
2016-01-06 19:31:00  17.20  46704  16.966667
2016-01-06 19:32:00  17.20  46704  17.200000
2016-01-06 19:33:00  17.20  46704  17.526667
2016-01-06 19:34:00  18.18  46705        NaN


python - Python Pandas-周期长度不均匀的移动平均值-LMLPHP

编辑

这是缺少数据的示例。

# Random data parameters
num_sample = (0, 100)
nb_sample = 1000
start_date = '2016-06-02'
freq = '2T'

random_state = np.random.RandomState(0)

# Generating random data
df = pd.DataFrame({'data': random_state.randint(num_sample[0], num_sample[1], nb_sample)},
                          index=random_state.choice(
                              pd.date_range(start=pd.to_datetime(start_date), periods=nb_sample * 3,
                                            freq=freq),
                              nb_sample))
# Removing duplicate index
df = df.groupby(df.index).first()
# Removing data for closed periods
df.loc[(df.index.hour >= 22) | (df.index.hour <= 7),'data'] = np.nan
# Resampling
df = df.resample('1T').ffill()
# Moving average by hours
df['avg'] = df['data'].rolling(window=60).mean()

ax = df.plot(kind='line', subplots=True)


python - Python Pandas-周期长度不均匀的移动平均值-LMLPHP

关于python - Python Pandas-周期长度不均匀的移动平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37577470/

10-11 21:22