首页 > 解决方案 > Pandas:按时钟时间计算平均值和标准差

问题描述

我有一个这样的数据框:

        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

DataFrame 包含 2019 年全年每 10 秒记录的值。我需要计算value每个日期每小时的标准差和平均值/平均值,并为它们创建两个新列。我尝试首先将每个值的小时分开,例如:

df["hour"] = df["time"].astype(str).str[:2]

然后我尝试通过以下方式计算标准偏差:

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

但这不起作用,我可以就这个问题提出一些建议吗?

标签: pythonpandasdataframe

解决方案


我们可以在分隔符周围的列split,然后使用 对组件进行切片,最后将数据框与组件和聚合列一起使用和:time:hourstr[0]groupdatehourvaluemeanstd

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

如果要将broadcast聚合值汇总到原始数据框,那么我们需要使用transform而不是agg

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

         date      time  value   mean       std
0  2019-04-18  07:00:10  100.8  94.55  5.434151
1  2019-04-18  07:00:20   95.6  94.55  5.434151
2  2019-04-18  07:00:30   87.6  94.55  5.434151
3  2019-04-18  07:00:40   94.2  94.55  5.434151

推荐阅读