Pandas 如何计算通过IntervalIndex定义的列范围在2D数据帧上的几何平均值和STDEV?
我有一个2D数据帧,如下所示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
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不,另一个问题是关于算术平均数和标准差。这里是关于几何平均数和标准差,熊猫不支持。