Python 3.x 将一年的数据帧转换为365列的数据帧(一天一列)
我有一个时间间隔为5分钟的数据帧。但是,并非所有间隔都存在。例如:Python 3.x 将一年的数据帧转换为365列的数据帧(一天一列),python-3.x,pandas,dataframe,grouping,slice,Python 3.x,Pandas,Dataframe,Grouping,Slice,我有一个时间间隔为5分钟的数据帧。但是,并非所有间隔都存在。例如: Date Value_1 ... 2019-01-01 15:30:00 2.4866 2019-01-01 15:35:00 2.703 2019-01-01 15:40:00 0.0 2019-01-02 09:05:00 8.3087 2019-01-02 09:10:00 7.5134 2019-01-02 09:15:00 6.637 ... 我想知道是否有一种简单的方法或函数(我没有发
Date Value_1
...
2019-01-01 15:30:00 2.4866
2019-01-01 15:35:00 2.703
2019-01-01 15:40:00 0.0
2019-01-02 09:05:00 8.3087
2019-01-02 09:10:00 7.5134
2019-01-02 09:15:00 6.637
...
我想知道是否有一种简单的方法或函数(我没有发现任何东西)可以让288个间隔的数据帧只基于时间
00:00:00
00:05:00
00:10:00
...
23:50:00
23:55:00
其中每列为一天(365为一年)。最后,我想用上一个数据框填充这个数据框。如果没有可用数据,则可能是nan或0
多谢各位
< >编辑:更改初始数据框只考虑一个值:日期< /p> ,您可以用“代码> > StIGEngult”,从同一列的列日期时间和第二级<<代码>日期>代码中,第一级仅为<代码>时间>代码>。然后
取消堆叠
:
#sample dataframe
np.random.seed(1)
drange = pd.date_range('2019-01-01 09:30:00', freq='5T', periods=5)
df = pd.DataFrame({'datetime': drange.tolist() + (drange+pd.DateOffset(days=1)).tolist(),
'Value_1':np.random.randint(10, size=10),})
print (df)
datetime Value_1
0 2019-01-01 09:30:00 5
1 2019-01-01 09:35:00 8
2 2019-01-01 09:40:00 9
3 2019-01-01 09:45:00 5
4 2019-01-01 09:50:00 0
5 2019-01-02 09:30:00 0
6 2019-01-02 09:35:00 1
7 2019-01-02 09:40:00 7
8 2019-01-02 09:45:00 6
9 2019-01-02 09:50:00 9
# set_index and unstack
df_f = df.set_index([df['datetime'].dt.time,
df['datetime'].dt.date])['Value_1']\
.unstack()
print (df_f)
datetime 2019-01-01 2019-01-02
datetime
09:30:00 5 0
09:35:00 8 1
09:40:00 9 7
09:45:00 5 6
09:50:00 0 9
然后,如果要在索引中创建所有5分钟,在列中创建每天,可以使用reindex
和ffill
:
df_f = df_f.reindex(index=pd.date_range('2019-01-01 00:00:00',
freq='5T', periods=288).time,
columns=pd.date_range('2019-01-01',
freq='D', periods=365).date)\
.ffill()
很抱歉我更改初始数据框,只考虑一个索引(DATETIME)的值,感谢堆栈函数。@ KStor总体上有点像枢轴: