Python 熊猫:按时钟时间计算平均值和标准偏差

Python 熊猫:按时钟时间计算平均值和标准偏差,python,pandas,dataframe,Python,Pandas,Dataframe,我有这样一个数据帧: date time value 0 2019-04-18 07:00:10 100.8 1 2019-04-18 07:00:20 95.6 2 2019-04-18 07:00:30 87.6 3 2019-04-18 07:00:40 94.2 数据帧包含2019年全年每10秒记

我有这样一个数据帧:

        date             time         value
0     2019-04-18         07:00:10      100.8
1     2019-04-18         07:00:20      95.6
2     2019-04-18         07:00:30      87.6
3     2019-04-18         07:00:40      94.2
数据帧包含2019年全年每10秒记录的值。我需要计算每个日期每小时的标准偏差和
值的平均值,并为它们创建两个新列。我尝试先将每个值的小时分开,如:

df["hour"] = df["time"].astype(str).str[:2]
然后,我尝试通过以下方式计算标准偏差:

df["std"] = df.groupby("hour").median().index.get_level_values('value').stack().std()

但这行不通,我能就这个问题提出一些建议吗?

我们可以
拆分
分隔符周围的
时间
,然后使用
str[0]
小时
组件进行切片,最后,
日期
上的数据框
小时
组件和聚合列
平均值
标准

hr = df['time'].str.split(':', n=1).str[0]
df.groupby(['date', hr])['value'].agg(['mean', 'std'])
如果您想
将聚合值广播到原始数据帧,那么我们需要使用
转换
而不是
agg

g = df.groupby(['date', df['time'].str.split(':', n=1).str[0]])['value']
df['mean'], df['std'] = g.transform('mean'), g.transform('std')


我们可以
拆分
分隔符周围的
时间列
,然后使用
str[0]
hour
组件进行切片,最后,
日期
上的数据框
小时
组件和聚合列
平均值
标准

hr = df['time'].str.split(':', n=1).str[0]
df.groupby(['date', hr])['value'].agg(['mean', 'std'])
如果您想
将聚合值广播到原始数据帧,那么我们需要使用
转换
而不是
agg

g = df.groupby(['date', df['time'].str.split(':', n=1).str[0]])['value']
df['mean'], df['std'] = g.transform('mean'), g.transform('std')

  • 我们已经合成了数据。首先生成一个真正的datetime
  • groupby()
    hour
  • 使用
    descripe()
    获取meanstd
  • merge()
    返回原始数据帧
  • 我们已经合成了数据。首先生成一个真正的datetime
  • groupby()
    hour
  • 使用
    descripe()
    获取meanstd
  • merge()
    返回原始数据帧

如何将mean和std作为两个新列添加到DataFrame?是否要在原始DataFrame中添加这些列?在这种情况下,我们需要
transform
而不是
agg
。是的,最好将它们添加到原始数据框中以供进一步使用。@Mr.Engineer我已经编辑了答案。我如何将mean和std作为两个新列添加到数据框中?是否要将这些列添加到原始数据框中?在这种情况下,我们需要
transform
而不是
agg
。是的,最好将它们添加到原始数据帧中以供进一步使用。@Mr.Engineer我已经编辑了答案。这会引发异常dataframe'对象没有属性'datetime'@Mr.Engineer:
datetime
是这里第2行定义的数据帧中的一列。您必须稍微修改代码以适应特定的数据帧,例如,通过将日期和时间列组合成日期时间列。我更改了答案,最好使用pandaas datetime此抛出异常数据框“对象没有属性‘datetime’@Mr.Engineer:
datetime
是数据框中的一列,在这里的第2行中定义。您必须稍微修改代码以适应特定的数据帧,例如,通过将日期和时间列合并到日期时间列中。我更改了答案,最好使用pandaas datetime“我需要计算每个单独日期的每小时的标准偏差和值的平均数/平均数”,或不考虑日期的总体值,例如。“每天凌晨2-3点的stdev和
值的平均值/平均值”?@smci对于每个单独的日期,请参阅下面的公认解决方案。与其说“这不起作用”,不如解释该代码到底出了什么问题,或者如果它导致了错误,请说明是哪个错误。”我需要计算每个单独日期的stdev和每小时的
值的平均值/平均值,或不考虑日期的总体值,例如“所有日期凌晨2-3点的stdev和
值的平均值/平均值”?@smci对于每个单独日期,请参阅下面接受的解决方案。也不要说“这不起作用”,最好解释代码到底做错了什么,或者如果它导致了错误,请说明是哪个错误。
    datetime    value   mean    std
0   2019-01-01 00:00:00 86.014209   80.043364   5.777724
1   2019-01-01 00:00:10 77.241141   80.043364   5.777724
2   2019-01-01 00:00:20 71.650739   80.043364   5.777724
3   2019-01-01 00:00:30 71.066332   80.043364   5.777724
4   2019-01-01 00:00:40 77.203291   80.043364   5.777724
... ... ... ... ...
3144955 2019-12-30 23:59:10 89.577237   80.009751   5.773007
3144956 2019-12-30 23:59:20 82.154883   80.009751   5.773007
3144957 2019-12-30 23:59:30 82.131952   80.009751   5.773007
3144958 2019-12-30 23:59:40 85.346724   80.009751   5.773007
3144959 2019-12-30 23:59:50 78.122761   80.009751   5.773007