Pandas 如何计算通过IntervalIndex定义的列范围在2D数据帧上的几何平均值和STDEV?

Pandas 如何计算通过IntervalIndex定义的列范围在2D数据帧上的几何平均值和STDEV?,pandas,dataframe,Pandas,Dataframe,我有一个2D数据帧,如下所示 0.0 0.1 0.2 0.3 0.4 ... 0 0 1 NaN 1 9 1 NaN NaN NaN NaN 9 ... 。对于每一行,我要计算特定的等宽列范围(BIN)的和,该范围应通过IntervalIndex定义NaN以及0应被忽略。例如,使用pd.IntervalIndex.from_tuples([(0.0,0.2),(0.2,0.4)]我希望类似这样 (0.0, 0.2] (0.2, 0.4

我有一个2D数据帧,如下所示

  0.0  0.1  0.2  0.3  0.4  ...
0 0    1    NaN  1    9
1 NaN  NaN  NaN  NaN  9
...
。对于每一行,我要计算特定的等宽列范围(BIN)的和,该范围应通过
IntervalIndex
定义
NaN
以及
0
应被忽略。例如,使用
pd.IntervalIndex.from_tuples([(0.0,0.2),(0.2,0.4)]
我希望类似这样

        (0.0, 0.2]  (0.2, 0.4]
0 gmean 0.          3
  gstd  ...         ...
1 gmean ...
  gstd
如果我想计算算术平均值和算术标准差,我可以使用

df = pd.DataFrame(
    columns=[0.0, 0.1, 0.2, 0.3, 0.4],
    data=[[0, 1, np.nan, 1, 9],
          [np.nan, np.nan, np.nan, np.nan, 9]]
)

bins = pd.IntervalIndex.from_tuples([(0.0, 0.2), (0.2, 0.4)])

def mean_and_std(df, bins):
    cuts = pd.cut(df.columns, bins, include_lowest=True)
    return df.T.groupby(cuts).agg(['mean', 'std']).T

mean_and_std(df, bins)
哪个会输出

            (0.0, 0.2]  (0.2, 0.4]
0   mean    1.0         5.000000
    std     NaN         5.656854
1   mean    NaN         9.000000
    std     NaN         NaN

但是几何平均值和几何标准差不受pandas支持,需要从scipy中获取。但是
gmean()
gstd()
不受pandas支持(与和相比)。这意味着它们不适用于
pandas.DataFrame.agg()
如上文所述,例如……我如何才能获得尽可能高的预期输出?(由于数据帧有许多行和许多列,内存和执行性能至关重要。)

希望稍后有人会改进答案。 现在我知道,对于几何平均值您可以尝试QuantStats软件包:

import quantstats as qs
qs.extend_pandas()
pandas_df.geometric_mean()

希望这能有所帮助

?这能回答你的问题吗?@ansev不,另一个问题是关于算术平均数和标准差。这里是关于几何平均数和标准差,熊猫不支持。