使用scipy.stats.binned_statistic_2d

时间:2017-04-19 08:07:57

标签: python scipy statistics histogram binning

我对函数scipy.stats.binned_statistic_2d有疑问,其中包括:

我有2-D数据(x,y,f(x,y)),我想将x-y平面分区并计算每个bin的一些统计数据。为此,我使用非常方便的函数s binned_statistic_2d。 但是我们假设我想计算每个箱子的几个统计值 - 让我们说平均值和中位数。因此我发现尝试这样的事情很自然

stats.binned_statistic_2d(data["x"], data["y"], data["f"], statistic = lambda x: [ np.mean(x), np.median(x) ], bins = bin_number )

但是这不起作用,因为binned_statistic_2d期望统计函数只返回标量,而不是标量列表。

当然我可以两次调用binned_statistic_2d,但由于bin_number对我而言非常高,而且数据是一个巨大的数据帧,这需要很多时间。

那么,当我想用​​这个函数一次计算几个统计函数时,你有什么想法,我可以做什么而不是多次执行binned_statistic_2d

为了玩游戏,一个小小的工作示例:

import pandas as pd
from scipy import stats

df = pd.DataFrame([  [i,j,i*j] for i in range(10) for j in range(10)], columns = ["x", "y", "f"])
# The following works
hist, _, _, _ = stats.binned_statistic_2d(df["x"], df["y"], df["f"], statistic = lambda x:  np.mean(x)  ,bins=4)    
# The following doesn't work
hist, _, _, _ = stats.binned_statistic_2d(df["x"], df["y"], df["f"], statistic = lambda x:  [ np.mean(x), np.median(x) ]  ,bins=4)

提前致谢, 尔根

1 个答案:

答案 0 :(得分:1)

您要使用pandas.DataFrame.pivot_table。您可以使用aggfunc指定要聚合的多个功能。