【问题标题】:Python/Pandas aggregating by datePython/Pandas 按日期聚合
【发布时间】:2018-09-04 17:16:25
【问题描述】:

我正在尝试每天计算和绘制每个区域的数据点数量,到目前为止,我有:

但我想显示每个县每天的实例数,最终目标是将它们绘制在折线图上,例如:

只有我想在自己的线上绘制每个县,而不是我上面绘制的总数。

更新:

我已经设法从提供的答案中得到了这个:

这很棒,正是我想要的。然而,事后看来,这看起来有点混乱,即使是在短时间内绘制的描述性也不是很好,更不用说如果我要为几年的数据绘制它。

所以我想在一个 8 格图上单独绘制。但是,当我尝试为一个县绘制此图时,我得到了布尔值。如下:

仅绘制 True 值的最佳方法是什么?

【问题讨论】:

  • df[df.county == 'Surrey'].groupby(df.date_stamp).count() --groupby 中的选择会导致布尔结果。如果您对某个特定县感兴趣,那么为什么要按县分组-您不应该那样做。而是先选择,然后仅按日期分组。

标签: python-3.x pandas matplotlib seaborn


【解决方案1】:

你可以试试

df.county.groupby([df.date_stamp, df.county]).count().unstack().plot();
  • df.county...count() 是您要绘制的数字系列。
  • groupby([df.date_stamp, df.county]) 先由date_stamp 分组,然后由country 分组(顺序很重要)。
  • unstack 将创建一个 Dataframe,其索引是时间戳,列是县。
  • plot(); 将绘制它(; 会抑制不必要的输出)。

编辑

要将其绘制在单独的图上,您可以执行类似的操作

for county in df.county.unique():
    this_county = df[df.county == county]
    this_county.county.groupby(df.date_stamp).count().plot();
    title(county);
    show();

【讨论】:

  • 刚刚更新了这个问题 - 非常感谢您的意见!
  • 再次感谢!! @Ami Tavory
【解决方案2】:
pd.crosstab(df['date_stamp'],df['county']).plot()

编辑:问题已更改,如果您希望它们出现在子图中而不是行中:

pd.crosstab(df['date_stamp'],df['county']).plot(subplots=True)

将每个县绘制成单独的线的关键是每个县需要在不同的列中。如果您只想计算它们,那么交叉表可能是实现该结果的最短方法。例如:

那么结果是:

当subplots=True:

【讨论】:

  • 刚刚更新了这个问题 - 非常感谢您的意见!
猜你喜欢
  • 2021-07-17
  • 1970-01-01
  • 2022-11-30
  • 2020-12-13
  • 2017-10-07
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
相关资源
最近更新 更多