Python Pandas-从datetime索引创建新列
我有以下一系列小时数据:Python Pandas-从datetime索引创建新列,python,pandas,dataframe,datetime,Python,Pandas,Dataframe,Datetime,我有以下一系列小时数据: timestamp 2021-01-04 00:00:00 32896.2200 2021-01-04 01:00:00 33229.4000 2021-01-04 02:00:00 33508.7800 2021-01-04 03:00:00 33611.6000 2021-01-04 04:00:00 33345.2500 ... 2021-04-23 19:00:00 50963.6
timestamp
2021-01-04 00:00:00 32896.2200
2021-01-04 01:00:00 33229.4000
2021-01-04 02:00:00 33508.7800
2021-01-04 03:00:00 33611.6000
2021-01-04 04:00:00 33345.2500
...
2021-04-23 19:00:00 50963.6000
2021-04-23 20:00:00 50563.0000
2021-04-23 21:00:00 50361.3700
2021-04-23 22:00:00 50524.4600
2021-04-23 23:00:00 51187.2700
我想创建一个dataframe,它将每周作为一个单独的列,包含168行(24小时*每周7天)。最理想的方法是什么?我建议使用
dt.isocalendar().week
创建一个额外的列week
,然后创建一个以week为列的透视表。唯一的问题是如何处理时间戳,我可以想象您希望将它们作为索引。解决方案是将时间戳按dt.dayofweek
和dt.hour
分割,并将其用作索引:
import pandas as pd
data = [ { "timestamp": "2021-01-04 00:00:00", "value": 32896.22 }, { "timestamp": "2021-01-04 01:00:00", "value": 33229.4 }, { "timestamp": "2021-01-04 02:00:00", "value": 33508.78 }, { "timestamp": "2021-01-04 03:00:00", "value": 33611.6 }, { "timestamp": "2021-01-04 04:00:00", "value": 33345.25 }, { "timestamp": "2021-04-23 19:00:00", "value": 50963.6 }, { "timestamp": "2021-04-23 20:00:00", "value": 50563 }, { "timestamp": "2021-04-23 21:00:00", "value": 50361.37 }, { "timestamp": "2021-04-23 22:00:00", "value": 50524.46 }, { "timestamp": "2021-04-23 23:00:00", "value": 51187.27 } ]
df= pd.DataFrame(data)
df['timestamp'] = pd.to_datetime(df['timestamp'])
df['week'] = df['timestamp'].dt.isocalendar().week
df["day_of_week"] = df["timestamp"].dt.dayofweek
df["hour"] = df["timestamp"].dt.hour
final_df = pd.pivot_table(df, values='value', index=['day_of_week', 'hour'], columns=['week'])
这将导致:
1.
16
(0, 0)
32896.2
楠
(0, 1)
33229.4
楠
(0, 2)
33508.8
楠
(0, 3)
33611.6
楠
(0, 4)
33345.2
楠
(4, 19)
楠
50963.6
(4, 20)
楠
50563
(4, 21)
楠
50361.4
(4, 22)
楠
50524.5
(4, 23)
楠
51187.3