选择最接近给定值的行

时间:2018-03-30 09:42:45

标签: python pandas

          A   B       C
0  01:00:00  24  Andrew
1  01:00:00  28     Edd
2  01:00:00  17    Emma
3  01:00:00  10    Fred
4  02:00:00  11  Andrew
5  02:00:00  35     Edd
6  02:00:00  45    Emma
7  02:00:00  14    Fred

我想为每个A组选择一行,具有以下条件:

  • 选择距离最近的B值为15(如果01:00:00最接近15的值为17;请在02:00:00中选择{{1} }})。

输出应为:

14

1 个答案:

答案 0 :(得分:4)

我认为需要:

df = df.loc[df['B'].sub(15).abs().groupby(df['A']).idxmin()]
print (df)
          A   B     C
2  01:00:00  17  Emma
7  02:00:00  14  Fred

<强>详情:

print (df['B'].sub(15).abs())
0     9
1    13
2     2
3     5
4     4
5    20
6    30
7     1
Name: B, dtype: int64

print (df['B'].sub(15).abs().groupby(df['A']).idxmin())
A
01:00:00    2
02:00:00    7
Name: B, dtype: int64

<强>解释

  1. 首先减去sub并获取绝对值
  2. groupby按列A和每组获取最小值的索引DataFrameGroupBy.idxmin
  3. loc
  4. 选择行