【问题标题】:Calculate mean for all the columns every 12 hours每 12 小时计算所有列的平均值
【发布时间】:2019-02-23 07:06:51
【问题描述】:

我有一个数据框,我想每 12 小时计算一次所有列的平均值。 数据框有超过 20 万行。

          DateTime Speed   TRQ         ...    PtoP3  RMS3   Crest3
0       2016-07-01 00:00   994  35.4   ...       NA    NA       NA
1       2016-07-01 00:01   995  34.6   ...       NA    NA       NA
2       2016-07-01 00:02   995    34   ...       NA    NA       NA

这是我写的

Present_data.to_datetime(Present_data['DateTime'])
Total_12hravg_all = Present_data.groupby(pd.Grouper(freq='12H', key='DateTime')).mean()
print(Total_12hravg_all)

得到这个错误

TypeError:仅适用于 DatetimeIndex、TimedeltaIndex 或 PeriodIndex,但得到了一个“索引”实例

【问题讨论】:

  • 第一次尝试Present_data['DateTime'] = pd.DatetimeIndex(Present_data['DateTime'])
  • @Alexhttps://stackoverflow.com/users/2411802/alexanderander 仍然出现同样的错误

标签: python pandas dataframe mean


【解决方案1】:

如果Datetime 是列

你的解决方案应该很好用:

Present_data['DateTime'] = pd.to_datetime(Present_data['DateTime'])
Total_12hravg_all = Present_data.groupby(pd.Grouper(freq='12H', key='DateTime')).mean()

替代解决方案是使用resample 和参数on

Present_data['DateTime'] = pd.to_datetime(Present_data['DateTime'])
Total_12hravg_all = Present_data.resample('12H', on='DateTime').mean()

或者创建DatetimeIndex:

Present_data['DateTime'] = pd.to_datetime(Present_data['DateTime'])
Present_data = Present_data.set_index('DateTime')
Total_12hravg_all = Present_data.groupby(pd.Grouper(freq='12H')).mean()
#resample
#Total_12hravg_all = Present_data.resample('12H').mean()

如果Datetime 是索引

Present_data.index = pd.to_datetime(Present_data.index)

Total_12hravg_all = Present_data.groupby(pd.Grouper(freq='12H')).mean()
#resample
#Total_12hravg_all = Present_data.resample('12H').mean()

最终解决方案:

Present_data['DateTime'] = pd.to_datetime(Present_data['DateTime'])
Present_data = Present_data.set_index('DateTime')

#convert non numeri values to NaNs
Present_data = Present_data.apply(lambda x: pd.to_numeric(x, errors='coerce'))

Total_12hravg_all = Present_data.groupby(pd.Grouper(freq='12H')).mean()
#resample
#Total_12hravg_all = Present_data.resample('12H').mean()

【讨论】:

  • 我有一个数据框 Total_12hravg_all,其中有两列 PtoP3 和 RMS3,如果 PtoP3 包含同一行的 Nan,我需要将 RMS3 值替换为 nan。我该怎么做?
  • @prashantsharma - 使用Present_data.loc[Present_data['PtoP3'].isnull(), 'RMS3'] = np.nan
  • 如何删除整个数据框和一些变量??德尔会工作吗??
  • @prashantsharma - 更好的是drop - stackoverflow.com/a/18145399
  • 我想在存在 nan 的地方将我的数据框的所有列更改为 -1。只需从上述语句中删除 RMS3 就可以了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
相关资源
最近更新 更多