【问题标题】:Group index by minute and compute average按分钟分组索引并计算平均值
【发布时间】:2017-02-18 13:10:48
【问题描述】:

所以我有一个名为“df”的 pandas 数据框,我想删除秒数,只使用 YYYY-MM-DD HH:MM 格式的索引。但也会对分钟进行分组,并显示该分钟的平均值。

所以我想转这个dataFrame

                        value
2015-05-03 00:00:00     61.0
2015-05-03 00:00:10     60.0
2015-05-03 00:00:25     60.0
2015-05-03 00:00:30     61.0
2015-05-03 00:00:45     61.0
2015-05-03 00:01:00     61.0
2015-05-03 00:01:10     60.0
2015-05-03 00:01:25     60.0
2015-05-03 00:01:30     61.0
2015-05-03 00:01:45     61.0
2015-05-03 00:02:00     61.0
2015-05-03 00:02:10     60.0
2015-05-03 00:02:25     60.0
2015-05-03 00:02:40     60.0
2015-05-03 00:02:55     60.0
2015-05-03 00:03:00     59.0
2015-05-03 00:03:15     59.0
2015-05-03 00:03:20     59.0
2015-05-03 00:03:35     59.0
2015-05-03 00:03:40     60.0

进入这个数据框

                        value
2015-05-03 00:00        60.6
2015-05-03 00:01        60.6
2015-05-03 00:02        60.2
2015-05-03 00:03        59.2

我试过类似的代码

df['value'].resample('1Min').mean()

df.index.resample('1Min').mean()

但这似乎不起作用。有什么想法吗?

【问题讨论】:

  • 对我来说效果很好。你有什么错误?
  • df.index.resample('1Min').mean() 给出错误 AttributeError: 'DatetimeIndex' object has no attribute 'resample' and df['value'].resample('1Min' ).mean() 没有给出错误但没有给出预期的结果,没有任何变化我没有得到平均值,秒数仍然存在

标签: python pandas average minute pandas-groupby


【解决方案1】:

您需要先将索引转换为DatetimeIndex

df.index = pd.DatetimeIndex(df.index)
#another solution
#df.index = pd.to_datetime(df.index)

print (df['value'].resample('1Min').mean())
#another same solution
#print (df.resample('1Min')['value'].mean())
2015-05-03 00:00:00    60.6
2015-05-03 00:01:00    60.6
2015-05-03 00:02:00    60.2
2015-05-03 00:03:00    59.2
Freq: T, Name: value, dtype: float64

通过astype 将索引中的秒值设置为0 的另一种解决方案:

print (df.groupby([df.index.values.astype('<M8[m]')])['value'].mean())
2015-05-03 00:00:00    60.6
2015-05-03 00:01:00    60.6
2015-05-03 00:02:00    60.2
2015-05-03 00:03:00    59.2
Name: value, dtype: float64

【讨论】:

  • 我的代码中已经有了 df.index = df.index.to_datetime(),这不会转换为 datetimeindex 吗?
  • 你试试df.index = pd.to_datetime(df.index) 吗?
  • 好的,我真正想要的代码是 df = df['value'].resample('1Min').mean(),谢谢,4 分钟后会接受你的回答!跨度>
  • 很高兴能为您提供帮助。 df.resample('1Min')['value'].mean()df['value'].resample('1Min').mean() 一样,我加了回答。
  • @ak3191 - 我认为没有必要进行绘图,请使用s = df.groupby([df.index.values.astype('&lt;M8[m]')])['value'].mean()s.plot()。但是如果想要DataFrame 使用rint (df.groupby([df.index.values.astype('&lt;M8[m]')])['value'].mean().reset_index())
猜你喜欢
  • 2021-07-07
  • 2020-04-25
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
  • 2017-04-15
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
相关资源
最近更新 更多