时间序列数据帧熊猫中的多日明智图

时间:2018-07-07 03:49:38

标签: python pandas plot time-series

我的数据框看起来像这样-

In [1]: df.head()
Out[1]:
Datetime                     Value
2018-04-21 14:08:30.761     offline
2018-04-21 14:08:40.761     offline
2018-04-21 14:08:50.761     offline
2018-04-21 14:09:00.761     offline
2018-04-21 14:09:10.761     offline

我有2周的数据。我想绘制一周中每一天相对于时间(小时:分钟)的值。如果我一次要查看一次数据也行得通。

我花了一整天的时间使用plotly创建了一个情节。

 In[9]: df['numval'] = df.Value.apply(lambda x: 1 if x == 'online' else -1)
 In[10]: df.iplot()

如果周日至周六可以使用几行类似于这样的多幅图,那么它将加快我的工作 Result

建议- 像我可以在工作日(0-6),时间(x轴)和值(y轴)中输入参数,这样可以创建7个图。

In[11]: df['weekday'] = df.index.weekday
In[12]: df['weekdayname'] = df.index.weekday_name
In[13]: df['time'] = df.index.time

任何库都可以正常工作,因为我只想查看数据,并且需要测试对数据的修改。

可选-数据上的分布曲线(类似于KDE)会很好 enter image description here

1 个答案:

答案 0 :(得分:0)

这可能不是您要查找的确切答案。只是给出一种可能有用的方法。

此处的方法是根据日期对数据进行分组,然后为每个组生成一个图。为此,您需要将DateTime列分为两列-日期和时间。下面的代码可以做到这一点:

datetime_series = df['Datetime']
date_series = pd.Series()
time_series = pd.Series()

for datetime_string in datetime_series:
    date,time = datetime_string.split(" ")
    date_s = pd.Series(date,dtype=str)
    time_s = pd.Series(time, dtype=str)
    date_series=date_series.append(date_s, ignore_index=True)
    time_series = time_series.append(time_s, ignore_index=True)

上面的代码将给您两个单独的熊猫系列。一个用于约会,另一个用于时间。现在,您可以将两列添加到数据框中

df['date'] = date_series
df['time'] = time_series

现在,您可以使用groupby功能根据日期对数据进行分组并为每个组绘制数据。像这样:

首先将“离线”替换为0:

df1 = df.replace(to_replace='offline',value=0)

现在根据日期和情节对数据进行分组:

for title, group in df1.groupby('date'):
    group.plot(x='time', y='Value', title=title)