python - 如何获得 2d DataFrame 中一系列值的平均值
问题描述
我的 Jupyter-Notebook 中有一个 2d DataFrame (df_1),我想将某个范围值的平均值复制到一个新的 DataFrame 中。第一个 bin(基于 v_wind)应该从 3.00 计数到 3.10 并平均来自 p_abs 的所有相应值。数据包含大约 5502 行。
p_abs v_wind
19.94 3.00
3.35 3.02
29.26 3.03
47.97 3.04
42.99 3.05
16.20 3.06
19.00 3.07
34.54 3.10
16.16 3.10
7.49 3.11
48.85 3.14
23.19 3.16
25.69 3.18
34.47 3.18
27.82 3.19
31.18 3.19
58.86 3.19
36.17 3.19
36.47 3.19
33.79 3.22
23.72 3.23
我已经尝试将 DataFrame 总结为:
df_1.groupby(['v_wind']).mean()
但这不允许我对我范围内的所有值进行平均。
有人可以告诉我如何创建一个新的 DataFrame (df_2),如下所示:
p_abs v_wind
avg_value 3.1
avg_value 3.2
avg_value 3.3
avg_value 3.4
avg_value 3.5
avg_value 3.6
我是 Python 的血腥初学者,感谢您的任何建议......
解决方案
与pd.cut
. 您需要确定是否需要类似[3, 3.1)
或(3, 3.1]
指定right
为参数的垃圾箱。
import pandas as pd
import numpy as np
bins = np.arange(3, 4, 0.1)
df.groupby(pd.cut(df.v_wind, bins=bins, right=False)).p_abs.mean()
v_wind
[3.0, 3.1) 25.530000
[3.1, 3.2) 31.740833
[3.2, 3.3) 28.755000
[3.3, 3.4) NaN
[3.4, 3.5) NaN
[3.5, 3.6) NaN
[3.6, 3.7) NaN
[3.7, 3.8) NaN
[3.8, 3.9) NaN
Name: p_abs, dtype: float64
如果您希望这更通用,而不是对垃圾箱进行硬编码,您可以获得“偶数”垃圾箱:
space = 0.1
bins = np.arange(df['v_wind'].min()//space*space,
(df['v_wind'].max()+space)//space*space, space)
#array([3. , 3.1, 3.2, 3.3])
推荐阅读
- c - 简单的计算器不适用于 C 中的大数字
- c# - C# ASP.NET 向单个用户添加属性列表
- graphviz - 如何通过消除蛇行和更好的边缘交叉来影响 Graphviz/dot 以制作更好的控制流图?
- javascript - Angular cdkDropList 拖动元素限制
- android - Motion UI ListView 安卓示例
- python - 如何在 Google Cloud Shell 中安装 Python?
- bash - 管道 bzip2 输出到 tdbloader2 (apache-jena) 给出“文件不存在”
- java - 来自仅包含数字的字符串的 JAVA 最大值
- environment-variables - Dymola mos 脚本环境变量
- go - 执行 .go 文件时出错。即使安装了 go 也无法识别