pandas 数据框中每一行的可变 bin
Variable bins for each row in pandas dataframe
给定一个坐标数据框,例如df1 = pd.DataFrame({'x': np.tile(np.arange(20),5), 'y': np.repeat(np.arange(5),20)})
我想对每个 x 值进行分箱,但是每行的分箱数量各不相同。更具体地说,bin 的数量取决于 y 值。
例如点 x=6 和 y=2
如果箱数 = y+1 = 3
那么该行的 bin 是 (0, 6.33], (6.33, 12.67], (12.67, 19] 并且生成的 bin 是 (0, 6.33]
部分生成的数据框如下所示:
x y xbinned
18 2 (12.67, 19]
19 2 (12.67, 19]
0 3 (0, 4.75]
1 3 (0, 4.75]
以下生成所需的 bin:
xbins = []
for y in df1.y:
xbins.append(np.linspace(df1['x'].min(), df1['x'].max(), y+1))
但不能在剪辑中使用:
df['xbinned'] = pd.cut(df.x, bins=xbins)
因为它需要一维数组而不是二维数组。
我从这里去哪里?我想我可以使用循环来做到这一点,但希望使用 pandas 函数来获得更矢量化的解决方案。
IIUC:
df1['xbinned'] = (df1.groupby('y')
.apply(lambda d: pd.cut(d['x'], bins=d['y'][0]+1))
.reset_index(level=0, drop=True)
)
输出(部分)
x y xbinned
18 18 0 (-0.019, 19.0]
19 19 0 (-0.019, 19.0]
38 18 1 (9.5, 19.0]
39 19 1 (9.5, 19.0]
给定一个坐标数据框,例如df1 = pd.DataFrame({'x': np.tile(np.arange(20),5), 'y': np.repeat(np.arange(5),20)})
我想对每个 x 值进行分箱,但是每行的分箱数量各不相同。更具体地说,bin 的数量取决于 y 值。
例如点 x=6 和 y=2 如果箱数 = y+1 = 3 那么该行的 bin 是 (0, 6.33], (6.33, 12.67], (12.67, 19] 并且生成的 bin 是 (0, 6.33]
部分生成的数据框如下所示:
x y xbinned
18 2 (12.67, 19]
19 2 (12.67, 19]
0 3 (0, 4.75]
1 3 (0, 4.75]
以下生成所需的 bin:
xbins = []
for y in df1.y:
xbins.append(np.linspace(df1['x'].min(), df1['x'].max(), y+1))
但不能在剪辑中使用:
df['xbinned'] = pd.cut(df.x, bins=xbins)
因为它需要一维数组而不是二维数组。
我从这里去哪里?我想我可以使用循环来做到这一点,但希望使用 pandas 函数来获得更矢量化的解决方案。
IIUC:
df1['xbinned'] = (df1.groupby('y')
.apply(lambda d: pd.cut(d['x'], bins=d['y'][0]+1))
.reset_index(level=0, drop=True)
)
输出(部分)
x y xbinned
18 18 0 (-0.019, 19.0]
19 19 0 (-0.019, 19.0]
38 18 1 (9.5, 19.0]
39 19 1 (9.5, 19.0]