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
答案 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
<强>解释强>:
sub
并获取绝对值groupby
按列A
和每组获取最小值的索引DataFrameGroupBy.idxmin
loc