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



我有一个数据帧,看起来像这个

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行代码中实现这一点?

以下是您的代码逻辑,但不是一行:

# 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

最新更新