首页 > 解决方案 > 熊猫将一天中的所有值设置为当天某个时间的数据

问题描述

生成数据

random.seed(42)
date_rng = pd.date_range(start='1/1/2018', end='1/08/2018', freq='H')
df = pd.DataFrame(np.random.randint(0,10,size=(len(date_rng), 3)),
                  columns=['data1', 'data2', 'data3'],
                  index= date_rng)
daily_mean_df = pd.DataFrame(np.zeros([len(date_rng), 3]),
                             columns=['data1', 'data2', 'data3'],
                             index= date_rng)
mask = np.random.choice([1, 0], df.shape, p=[.35, .65]).astype(bool)
df[mask] = np.nan

df
>>>
                 data1 data2 data3
2018-01-01 00:00:00 1.0 3.0 NaN
2018-01-01 01:00:00 8.0 5.0 8.0
2018-01-01 02:00:00 5.0 NaN 6.0
2018-01-01 03:00:00 4.0 7.0 4.0
2018-01-01 04:00:00 NaN 8.0 NaN
... ... ... ...
2018-01-07 20:00:00 8.0 7.0 NaN
2018-01-07 21:00:00 5.0 4.0 5.0
2018-01-07 22:00:00 NaN 6.0 NaN
2018-01-07 23:00:00 2.0 4.0 3.0
2018-01-08 00:00:00 NaN NaN NaN

我想每天选择一个特定时间,然后将一天中的所有值设置为等于该时间的数据。比如我想选择1:00:00,那么2018-01-01的所有数据都等于2018-01-01 01:00:00,2018-01-02的所有数据都等于2018 -01-02 01:00:00 等,

我知道如何选择时间的数据:

timestamp = "01:00:00"
df[df.index.strftime("%H:%M:%S") == timestamp]

但我不知道如何设置当天的数据等于它。

感谢您的阅读。

标签: pythonpandastime-series

解决方案


检查重新索引

s=df[df.index.strftime("%H:%M:%S") == timestamp]
s.index=s.index.date
df[:]=s.reindex(df.index.date).values

推荐阅读