python - 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()
但这不起作用,我可以就这个问题提出一些建议吗?
解决方案
我们可以在分隔符周围的列split
,然后使用 对组件进行切片,最后将数据框与组件和聚合列一起使用和:time
:
hour
str[0]
group
date
hour
value
mean
std
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
推荐阅读
- java - 基于超类@mappedSuperclass属性条件的方法名称的jpa查询问题
- javascript - 给定一些规则,如何最大化对象组合的价值
- c++ - 将 Git 提交哈希读入 C++ 时出错
- groovy - 方法没有签名:java.lang.String.waitFor() 适用于参数类型:() 值:[]
- kubernetes - Google Cloud Endpoints (ESP) gRPC 转码为驼峰式
- angular - 动态 Mat-Table - 表为空
- docker - 运行 Docker for Windows 和 Minikube 是否需要两个物理网络适配器?
- javascript - 两位小数的利润计算Javascript
- pyspark - 获取pyspark数组类型列的最后n个元素
- c# - 如何淡入/淡出文本网格?不工作