【问题标题】:Average of each day over multiple years多年来每天的平均值
【发布时间】:2016-07-18 13:46:40
【问题描述】:

快速问:

拥有一个数据集:这是几年内每天的测量值。 试图计算出所有相同日期的平均值。即 01/01/1995 和 01/01/1996 和 01/01/1997 等的平均值。

试过这个:

z=df.groupby(df.index.day,df.index.month).mean()

但是得到:

TypeError: unhashable type: 'numpy.ndarray'

干杯

【问题讨论】:

  • 您的数据是如何存储的?

标签: python numpy pandas


【解决方案1】:

IIUC 你需要传递一个列表:

z=df.groupby([df.index.day,df.index.month]).mean()

您所做的是传递多个参数,因此它将月份数组解释为 axis 的参数,请参阅 docs

【讨论】:

  • 太好了 只是为了检查一下,这(因为我已经将它分成了几年,即从 1990-2000 年和 2000-2010 年)是否会使它们保持相同的顺序。只是标签 atm 说 (1,1), (2,20), (4,11),(5,31),(7,20),(9,8),(10,28),(12, 17)
  • 它将按您传递的 args 列表对它们进行排序,除非您想保留 df 顺序,在这种情况下传递 sort=False
  • 注意:颠倒语法会得到更直观的结果;第一个索引是月份,第二个是天。 dat.groupby([dat.index.month, dat.index.day]).mean()。否则,您可能会为为什么一个月中只有 12 天一分钟而摸不着头脑。
  • @EHB 我住在世界的某个地方,约定是dd/mm/yyyy 日期的表示方式是当地偏好的问题,另外这是 OP 要求的格式
【解决方案2】:

嘿@EdChum 只是将其添加为答案,因为评论的显示不会让我表明我的意思。我同意日期格式是一种优越的语法!但是,当我以相反的顺序执行时,我会得到

    WindSpeed

1   1   1   9.283333
1   2   6.694444
1   3   7.861111
1   4   9.223529
...
1   31  8.964706
2   1   9.127778
2   2   8.733333
2   3   7.511111
...

第一个索引是月份,第二个是天。 当我按照您建议的顺序执行时,我得到:

    WindSpeed
1   1   9.283333
1   2   8.361111
1   3   6.670588
1   4   7.155556
1   5   8.450000
1   6   4.777778
1   7   3.666667
1   8   4.011765
1   9   5.210526
1   10  6.972222
1   11  7.647059
1   12  6.844444
...

第一个索引是天(从 1-31),第二个是月(从 1-12)。我们通常按顺序查看数据,1 月 1 日之后是 1 月 2 日。在您的数据中,1 月 1 日之后是 2 月 1 日。这让我有点困惑!无论如何,我的工作更好地满足我的需求。我非常感谢您在这里的回答!帮我解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    相关资源
    最近更新 更多