如何在熊猫列/系列中找到最接近输入数字的值?

时间:2020-10-09 14:00:56

标签: python pandas pandas-groupby

我有一个看起来像这样的数据框

pd.DataFrame({'A': ['C1', 'C1', 'C1', 'C1', 'C2', 'C2', 'C2', 'C2'],
  ...:                    'B': [1, 3, 6, 9, 2, 3, 4, 8]})
Out[3]: 
    A  B
0  C1  1
1  C1  3
2  C1  6
3  C1  9
4  C2  2
5  C2  3
6  C2  4
7  C2  8

对于“ A”列中的每个组,我需要找到最接近5的值。

我得到的数据框应该看起来像这样

    A  B      C
0  C1  1  False
1  C1  3  False
2  C1  6   True
3  C1  9  False
4  C2  2  False
5  C2  3  False
6  C2  4  True
7  C2  8  False

逻辑

组“ C1”中的

6最接近5 组“ C2”中的4最接近5

如何用理想的1行代码来实现?

1 个答案:

答案 0 :(得分:5)

这是您进行编码的逻辑,虽然不是一行:

# distance to 5
s=df['B'].sub(5).abs()

# groupby 'A' and find the min
df['C'] = s == s.groupby(df['A']).transform('min')

输出:

    A  B      C
0  C1  1  False
1  C1  3  False
2  C1  6   True
3  C1  9  False
4  C2  2  False
5  C2  3  False
6  C2  4   True
7  C2  8  False