【问题标题】:Convert dataframe of one year into a dataframe with 365 columns (one by day)将一年的数据框转换为 365 列的数据框(按天计算)
【发布时间】:2020-08-22 17:02:20
【问题描述】:

我有一个时间间隔为 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
...

我想知道是否有一种简单的方法或函数(我没有找到任何东西)来获得仅基于时间的 288 个间隔的数据帧

00:00:00
00:05:00
00:10:00
...
23:50:00
23:55:00

每列是一天(一年 365)。最后我想用前一个填充这个数据框。如果没有可用数据,则可能是 nan 或 0。

谢谢。

编辑:更改初始数据框以按日期仅考虑一个值

【问题讨论】:

  • 对不起。我将初始数据框更改为仅考虑索引的一个值(日期时间)

标签: python-3.x pandas dataframe grouping slice


【解决方案1】:

您可以使用set_index 进行此操作,第一级只有日期时间列中的time,第二级是同一列的date。然后unstack

#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 分钟,在列中创建每一天,你可以使用reindexffill

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()

【讨论】:

  • 感谢unstack功能。
  • @Ksartor 整体上有点像一个支点 :)
猜你喜欢
  • 1970-01-01
  • 2022-11-05
  • 1970-01-01
  • 2020-04-15
  • 2022-08-13
  • 1970-01-01
  • 2018-07-27
  • 2017-10-18
  • 1970-01-01
相关资源
最近更新 更多