我编写了以下函数:
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
函数无法处理它。
答案 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)