Python Pandas-查找超过阈值的第一个实例

时间:2018-07-28 23:54:48

标签: python pandas

我试图根据另一个Python Pandas数据框列查找值超过阈值的第一个实例。在下面的代码中,“跟踪”列的多个行具有相同的编号。我想找到“值”列超过3的第一个实例。然后,我要从该行中获取其余信息,并将其导出到新的Pandas数据框中(如第二个示例中所示)。有什么想法吗?

d = {"Trace": [1,1,1,1,2,2,2,2], "Date": [1,2,3,4,1,2,3,4], "Value": [1.5,1.9,3.1,5.5,1.1,3.6,1.9,6.2]}

df = pd.DataFrame(data=d)

Example2

3 个答案:

答案 0 :(得分:2)

通过使用idxmax

df.loc[(df.Value>3).groupby(df.Trace).idxmax]
Out[602]: 
   Date  Trace  Value
2     3      1    3.1
5     2      2    3.6

答案 1 :(得分:0)

一个选择是首先根据条件(Value > 3)进行过滤,然后仅对每个Trace采用第一项。 以下假设Trace是数字。

import numpy as np
import pandas as pd

df = pd.DataFrame({"Trace" : np.repeat([1,2],4),
                   "Value" : [1.5, 1.9, 3.1, 5.5, 1.1, 3.6, 1.9, 6.2]})

df = df.loc[df.Value > 3.0]
df = df.loc[np.diff(np.concatenate(([df.Trace.values[0]-1],df.Trace.values))) > 0]
print(df)

此打印

    Trace  Value
 2      1    3.1
 5      2    3.6

答案 2 :(得分:0)

您也可以使用.groupby().head(1)来实现:

>>> df.loc[df.Value > 3].groupby('Trace').head(1)
   Date  Trace  Value
2     3      1    3.1
5     2      2    3.6

这将为每个Trace查找Value> 3的行的第一个匹配项(根据您的DataFrame当前所处的顺序)。