在重复的数据帧行中找到中值的最接近值

Finding the closest value of median value in duplicated rows of dataframe

我有一个包含 2000 多行的 DataFrame。

这是我的 DataFrame 的一部分:

In [2]: df
Out[2]: 
     A    B     C     D
0    a    b    -1   3.5
1    a    b    -1    52
2    a    b    -1     2
3    a    b    -1     0
4    a    b     0    15
5    a    c    -1  1612
6    a    c     1    17
7    a    e     1    52
8    a    d    -1   412
9    a    d    -1   532

我想找到 D 列按 A、B 和 C 分组的中值的最接近(下一个)值的索引,并添加一个新列作为 Next_Med 来标记它。

这是预期的结果:

     A    B     C     D   Next_Med
0    a    b    -1   3.5          1
1    a    b    -1    52          0
2    a    b    -1     2          0
3    a    b    -1     0          0
4    a    b     0    15          1
5    a    c    -1  1612          1
6    a    c     1    17          1
7    a    e     1    52          1
8    a    d    -1   412          0
9    a    d    -1   532          1

例如,对于 a、b 和 -1 的组合,中值是 2.75,所以我想将 3.5 标记为 Next_Med

尝试使用 groupbytranform 以及 lambda 的单行代码:

>>> df['Next_Med'] = df.sort_values([*'ABC']).groupby([*'ABC'])['D'].transform(lambda x: x == min(x, key=lambda y: abs(y - x.median()))).astype(int).reset_index(drop=True)
>>> df
   A  B  C       D  Next_Med
0  a  b -1     3.5         1
1  a  b -1    52.0         0
2  a  b -1     2.0         0
3  a  b -1     0.0         0
4  a  b  0    15.0         1
5  a  c -1  1612.0         1
6  a  c  1    17.0         1
7  a  e  1    52.0         1
8  a  d -1   412.0         0
9  a  d -1   532.0         1
>>>