如何获得 2d DataFrame 中一系列值的平均值

How do I get the mean in a range of values in a 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。您需要通过指定 right 作为参数来确定您是否想要像 [3, 3.1)(3, 3.1] 这样的垃圾箱。

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

如果你想让它更通用而不是硬编码你可以得到 "even" bins with:

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])