首页 > 解决方案 > 如何获得 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 的血腥初学者,感谢您的任何建议......

标签: pythonpandasdataframejupyter-notebookmean

解决方案


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

推荐阅读