我有一个大约3年的熊猫数据框,分辨率为6秒,我想将数据分组为24小时制,并每天使用matplotlib循环绘制。 这是我数据框的头部:
timestamp consumption
0 2012-11-11 12:00:03 468
1 2012-11-11 12:00:09 476
2 2012-11-11 12:00:16 463
3 2012-11-11 12:00:22 449
4 2012-11-11 12:00:28 449
它包括从2012年到2015年一间房屋的功耗。经过预处理后,数据帧在第一天的下午12点开始。我需要以24小时为间隔绘制所有数据框,并且每个图都必须代表一天,从下午12点开始,直到第二天的下午12点结束。
因此,我需要大约 1500个图,以显示从下午12点开始的每一天的耗电量,大约是数据帧的1500天。
谢谢。
更新:我想分别绘制1500天的原因是,我想检查每晚的功耗并标记乘员的睡眠方式。我认为每天从12 pm到12 pm都有一个完整的睡眠周期。在准备好标签后,我将它们用作分类的训练和测试数据
答案 0 :(得分:0)
这不仅是一个答案,而且是一个建议。首先,将“时间戳”列转换为索引(DatetimeIndex)
df.set_index(df['timestamp'], inplace=True, drop=True)
然后,获取DataFrame中发生的所有独特情况
unique_days = list(set(df.index.to_period('D').strftime('%Y-%m-%d')))
然后将DataFrame压缩为一个系列
del df['timestamp']
df = df.squeeze()
现在,只需在单独的子图中绘制系列中独特的日子即可。
import matplotlib.pyplot as plt
unique_days = list(set(df.index.to_period('D').strftime('%Y-%m-%d')))
fig, axes = plt.subplots(nrows=len(unique_days), ncols=1)
row = 0
for day in unique_days:
df[day].plot(ax=axes[row], figsize=(50,10))
row += 1
plt.show()
现在,是时候使用plots的参数了,以便您可以根据需要自定义它们了。
答案 1 :(得分:0)
这是一个奇怪的请求。如果我们知道您的最终目标是什么,可能会更容易理解,但我将假设您要绘制然后保存每一天的数字。
df['day'] = (df['timestamp'] + pd.Timedelta('12h')).dt.date
for day in df['day'].unique():
mask = (df['day'] == day)
#<the code for the plot that you want>
plt.plot(x=df[mask]['timestamp'].dt.time,y=df[mask]['consumption'])
plt.savefig('filename'+str(day)+'.png')
plt.close()