【问题标题】:How to fit a pandas timeseries to a 24h graph?如何将熊猫时间序列拟合到 24 小时图?
【发布时间】:2019-12-15 23:10:36
【问题描述】:

我有一个多个月的 pandas 时间序列,并且想要计算一天中不同时间某个功能的出现次数。

即我想创建一个图表(使用 seaborn 或 matplotlib),x 轴(0 到 24 小时)为一天中的时间,y 轴为(like this) 列的相对出现次数。

我不知道如何正确格式化时间序列以使其正常工作。

编辑

这是我正在处理的数据样本。 “开放数据通道类型”可以假设五种(在线、电话、移动、未知、其他)。我的目标是将每种类型绘制成一个图表,显示一天中的哪个时间出现哪种类型。

【问题讨论】:

  • 您应该提供一些示例数据,以便我们更好地了解您正在处理的内容
  • 添加了数据样本,希望对您有所帮助。

标签: python pandas matplotlib seaborn


【解决方案1】:

您需要先准备绘图数据:

hour = df['Created Date'].dt.hour.rename('Hour')
df_plot = df.groupby(hour).apply(lambda x: x['Open Data Channel Type'].value_counts() / x.shape[0]) \
            .rename_axis(index=['Hour', 'Channel Type']) \
            .to_frame('Frequency') \
            .reset_index()

df_plot 的样本:

   Hour Channel Type  Frequency
0     0        OTHER   0.223744
1     0        PHONE   0.210046
2     0       MOBILE   0.205479
3     0      UNKNOWN   0.198630
4     0       ONLINE   0.162100
5     1      UNKNOWN   0.206311
6     1        OTHER   0.203883
7     1        PHONE   0.201456
8     1       MOBILE   0.196602
9     1       ONLINE   0.191748

然后你可以制作情节(这里使用 Seaborn):

ax = sns.lineplot(data=df_plot, x='Hour', y='Frequency', hue='Channel Type')
ax.figure.set_size_inches(10, 4)
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))

结果(使用随机数据):

【讨论】:

  • 感谢您的回答。可悲的是,当我尝试执行此命令时,我得到“NameError: name 'hour' is not defined”。我试过 dt.hour 但它也不起作用。
  • 对不起,我的错。更新了我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 2012-08-24
  • 2013-04-29
  • 1970-01-01
  • 2017-02-22
  • 1970-01-01
相关资源
最近更新 更多