如何使用Dask对DataFrame多列数据逐行计算平均值
错误原因分析
你之前使用的groupby()是分组聚合函数,作用是将数据按照传入列的取值对行做分组,对每个分组内的多行数据做聚合计算,完全不适用逐行运算的场景。另外你groupby的传参方式本身也不符合规范,多列分组需要把列名放在列表中传入,比如df.groupby(['x','y','z']),错误的传参方式也是你得到原数据的原因之一。
正确实现方案
要实现逐行对多列计算均值,只需要调用mean()方法时指定axis=1即可(axis=0为默认按列计算,axis=1代表按行计算)。
完整可运行代码示例
import pandas as pd # 构造你的测试数据 df = pd.DataFrame([ [1, 1.3, 0.1, 2.2], [2, 1.2, 0.5, 2.0], [3, 1.5, 0.3, 2.0], [4, 1.3, 0.0, 2.5], [5, 1.1, 0.3, 2.3] ], columns=['time', 'x', 'y', 'z']) # 逐行计算x/y/z三列的平均值,赋值给新列作为运动幅度 df['motion_amplitude'] = df[['x', 'y', 'z']].mean(axis=1) print(df)
运行输出示例
| time | x | y | z | motion_amplitude |
|---|---|---|---|---|
| 1 | 1.3 | 0.1 | 2.2 | 1.2 |
| 2 | 1.2 | 0.5 | 2.0 | 1.2333 |
| 3 | 1.5 | 0.3 | 2.0 | 1.2667 |
| 4 | 1.3 | 0.0 | 2.5 | 1.2667 |
| 5 | 1.1 | 0.3 | 2.3 | 1.2333 |
如果你需要的是三轴运动的合幅度而非算术平均值,也可以用逐行运算直接计算合模:
df['motion_magnitude'] = (df['x']**2 + df['y']**2 + df['z']**2)**0.5
内容的提问来源于stack exchange,提问作者adastra
相关产品推荐
相关产品推荐

