Python 选择数据框中具有最接近值的行
我想为每个组选择一行,条件如下: 选择最接近15的B值在02:00:00的情况下,最接近15的值为14。 如果有两个最接近15的值,则在01:00:00选择18的情况下,选择其中的较大值。 输出应为:Python 选择数据框中具有最接近值的行,python,pandas,conditional,Python,Pandas,Conditional,我想为每个组选择一行,条件如下: 选择最接近15的B值在02:00:00的情况下,最接近15的值为14。 如果有两个最接近15的值,则在01:00:00选择18的情况下,选择其中的较大值。 输出应为: A B C 0 01:00:00 24 Andrew 1 01:00:00 28 Edd 2 01:00:00 12 Emma 3 01:00:00 18 Fred 4 02:00:00 17 Andrew 5 02
A B C
0 01:00:00 24 Andrew
1 01:00:00 28 Edd
2 01:00:00 12 Emma
3 01:00:00 18 Fred
4 02:00:00 17 Andrew
5 02:00:00 35 Edd
6 02:00:00 45 Emma
7 02:00:00 14 Fred
另一种解决方案是创建辅助列,对值进行排序并删除重复项:
A B C
3 01:00:00 18 Fred
7 02:00:00 14 Fred
df.iloc[np.lexsort(
[-df.B, df.B.sub(15).abs()]
)].groupby('A').head(1)
A B C
3 01:00:00 18 Fred
7 02:00:00 14 Fred
其思想是,您可以按元组列D按每个元素以升序方式连续排序,因为在Python中元组就是这样排序的。另一种解决方案是创建辅助列,对值进行排序并删除重复项:
A B C
3 01:00:00 18 Fred
7 02:00:00 14 Fred
df.iloc[np.lexsort(
[-df.B, df.B.sub(15).abs()]
)].groupby('A').head(1)
A B C
3 01:00:00 18 Fred
7 02:00:00 14 Fred
其思想是,您可以按元组列D按每个元素以升序方式连续排序,因为在Python中元组就是这样排序的。这里的groupby是特殊情况,如果有两个最接近15的值,请选择其中较大的一个
此处的groupby是特殊情况下的结果,如果有两个最接近15的值,请选择其中较大的一个
与敏和关键的乐趣
np.lexsort怎么样
与敏和关键的乐趣
np.lexsort怎么样
我们可以使用abs和15.1,这将确保16比14更接近,以此类推 重新索引和删除重复项:
A B C
3 01:00:00 18 Fred
7 02:00:00 14 Fred
df.iloc[np.lexsort(
[-df.B, df.B.sub(15).abs()]
)].groupby('A').head(1)
A B C
3 01:00:00 18 Fred
7 02:00:00 14 Fred
或者,对于iloc和2行,还添加了一个排序回功能,以获取最短时间
df = df.reindex((df['B']-15.1).abs().sort_values().index).drop_duplicates('A')
print(df)
A B C
7 02:00:00 14 Fred
3 01:00:00 18 Fred
我们可以使用abs和15.1,这将确保16比14更接近,以此类推 重新索引和删除重复项:
A B C
3 01:00:00 18 Fred
7 02:00:00 14 Fred
df.iloc[np.lexsort(
[-df.B, df.B.sub(15).abs()]
)].groupby('A').head(1)
A B C
3 01:00:00 18 Fred
7 02:00:00 14 Fred
或者,对于iloc和2行,还添加了一个排序回功能,以获取最短时间
df = df.reindex((df['B']-15.1).abs().sort_values().index).drop_duplicates('A')
print(df)
A B C
7 02:00:00 14 Fred
3 01:00:00 18 Fred
很抱歉我的密码有错。编辑:对不起。我的密码有错。编辑在我不需要第二个条件的情况下,如果有两个最接近15的值,请选择其中的较大值;答案是什么?程序会选择两个值中的哪一个?如果有两个最接近15的值,我不需要第二个条件,请选择其中较大的一个;答案是怎样的?程序会选择两个值中的哪一个?非常令人沮丧,OP中途改变了他们的问题。好在我没有注意到,直到它太晚了-:非常令人沮丧,OP中途改变了他们的问题。好在我没有注意到,直到它太晚了-: