簡體   English   中英

Python Pandas-找到超過閾值的第一個實例

[英]Python Pandas- Find the first instance of a value exceeding a threshold

我試圖根據另一個 Python Pandas 數據框列找到超過閾值的第一個實例。 在下面的代碼中,“Trace”列的多行編號相同。 我想找到“值”列超過 3 的第一個實例。然后,我想從該行中獲取信息的 rest 並將其導出到新的 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)

在此處輸入圖像描述

通過使用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

您還可以使用.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 當前處於何種順序)。

一個選項是首先按條件( 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM