在高维 bin 中重新采样 pandas 没有日期时间索引的数据帧

Resampling pandas dataframe without datetime index in higher-dimensional bins

我有一个没有日期时间索引的 pandas DataFrame。我的 DataFrame 的一个示例如下

    x1      x2      x3      y1      y2
0   0.83    0.83    1.16    0.0     1.0
1   0.83    0.83    1.25    0.0     1.0
2   0.64    0.85    1.09    0.0     1.0
3   0.72    0.94    1.06    0.0     1.0
4   0.73    0.85    4.04    0.0     1.0
5   0.83    0.94    4.84    0.0     1.0
6   0.56    0.43    1.07    0.0     1.0
7   0.59    0.56    1.05    0.0     1.0
8   0.59    0.91    2.05    0.0     1.0
9   0.59    0.96    4.99    0.0     1.0
10  0.83    0.56    7.99    0.0     1.0

我想通过位于特定间隔内的 x1,x2,x3 的值对这个 DataFrame 重新采样,并对 y1y2 求和。假设这些间隔是 x1,x2[0,1]x3[1,8]。我将这些间隔划分为宽度为 0.01 的箱。然后,我想对这些间隔的给定 bin 中 x1,x2,x3 的每个值求和 y1y2

我该怎么做?

我们可以将每个 x 列值四舍五入到最接近的小数点 0.05 并使用 groupby + sum:

cols = ['x1','x2','x3']
out = df[cols].apply(lambda col: col.mul(10).astype(int).div(10).add(0.05)).combine_first(df).groupby(['x1','x2','x3'], as_index=False).sum()

输出:

      x1    x2    x3   y1   y2
0   0.55  0.45  1.05  0.0  1.0
1   0.55  0.55  1.05  0.0  1.0
2   0.55  0.95  2.05  0.0  1.0
3   0.55  0.95  4.95  0.0  1.0
4   0.65  0.85  1.05  0.0  1.0
5   0.75  0.85  4.05  0.0  1.0
6   0.75  0.95  1.05  0.0  1.0
7   0.85  0.55  7.95  0.0  1.0
8   0.85  0.85  1.15  0.0  1.0
9   0.85  0.85  1.25  0.0  1.0
10  0.85  0.95  4.85  0.0  1.0