熊猫:编写一个函数,该函数返回bin间隔中点以及值的平均值

时间:2019-05-21 19:44:12

标签: python python-3.x pandas pandas-groupby

我编写了以下函数:

def binning(df, end, numberofbins):
    df = df[df['xaxis'] <= end]
    bins = np.linspace(df['xaxis'].min(), df['xaxis'].max(), numberofbins)
    groups = df.groupby(pd.cut(df['xaxis'], bins))
    return groups.mean()['yaxis']

我现在正在尝试扩展此功能,以便与其返回x轴上的间隔,而不使用bin间隔的中点覆盖此函数。

我不确定如何解决这个问题,因为据说虽然bin间隔保存在索引中,但是我不确定如何仅索引间隔中的数字并对它们执行任何操作,继续用那些中点替换它。

已编辑添加:我已经尝试过在retbin=True的末尾添加pd.cut(),但遇到了错误。我的猜测是因为df.groupby函数无法处理它。

1 个答案:

答案 0 :(得分:0)

编辑:这将调整函数,使其返回一系列均值,其均值是间隔的中点,而不是间隔的中点:

def binning(df, end, numberofbins):
    df = df[df['xaxis'] <= end]
    bins = np.linspace(df['xaxis'].min(), df['xaxis'].max(), numberofbins)
    labels = np.diff(bins)/2 + bins[:-1]
    groups = df.groupby(pd.cut(df['xaxis'], bins))
    return pd.Series(groups.mean()['yaxis'].values, index=labels)

如果您只是在寻找垃圾箱的中点,则仅使用数据框对“ end”进行子集并获取垃圾箱的上下限。如果是这样,这应该可行:

def binning_mid(df, end, numberofbins):
    df = df[df['xaxis'] <= end]
    bins = np.linspace(df['xaxis'].min(), df['xaxis'].max(), numberofbins)
    intervals = pd.IntervalIndex.from_arrays(bins[:-1], bins[1:])
    midpoints = np.diff(bins)/2 + bins[:-1]
    return pd.Series(midpoints, index=intervals)