>

아래와 같은 데이터 프레임이 있습니다 :

Number  Req Response 
0       3    6
1       5    0
2       33   4
3       15   3
4       12   2

'Req'가 15가되기 전에 최소 'Response'값을 식별하고 싶습니다.

아래 코드를 시도했습니다 :

min_val=[]
for row in range(len(df)):
#if the next row of 'Req' contains 15, append the current row value of'Response'
  if(df[row+1].loc[df[row+1]['Req'] == 15]): 
         min_val.append(df['Response'].min())
  else:
         min_val.append(0)

'유효하지 않은 유형 비교'오류가 발생합니다.

아래 출력이 예상됩니다 :

Min value of df['Response'] is: 0

  • 답변 # 1

    가능한 경우 15  데이터에없는 경우 일반적인 해결책을 사용하십시오.

    df = df.reset_index(drop=True)
    out = df.loc[df.Req.eq(15)[::-1].cumsum().ne(0), 'Response'].sort_values()
    print (out)
    1    0
    3    3
    2    4
    0    6
    Name: Response, dtype: int64
    print (next(iter(out), 'no match'))
    0
    
    

    세부 정보:

    print (df.Req.eq(15))
    0    False
    1    False
    2    False
    3     True
    4    False
    Name: Req, dtype: bool
    print (df.Req.eq(15)[::-1])
    4    False
    3     True
    2    False
    1    False
    0    False
    Name: Req, dtype: bool
    print (df.Req.eq(15)[::-1].cumsum())
    4    0
    3    1
    2    1
    1    1
    0    1
    Name: Req, dtype: int32
    print (df.Req.eq(15)[::-1].cumsum().ne(0))
    4    False
    3     True
    2     True
    1     True
    0     True
    Name: Req, dtype: bool
    
    

    일치하지 않은 테스트 :

    print (df)
       Number  Req  Response
    0       0    3         6
    1       1    5         0
    2       2   33         4
    3       3  150         3
    4       4   12         2
    
    df = df.reset_index(drop=True)
    out = df.loc[df.Req.eq(15)[::-1].cumsum().ne(0), 'Response'].sort_values()
    print (out)
    Series([], Name: Response, dtype: int64)
    print (next(iter(out), 'no match'))
    no match
    
    

  • 답변 # 2

    idxmax 를 사용하는 한 가지 방법   Req 에서 첫 번째 색인을 찾으려면   15 와 같습니다 , 결과를 사용하여 데이터 프레임을 인덱싱하고 최소 Response 를 취하십시오. :

    df.loc[:df.Req.eq(15).idxmax(), 'Response'].min()
    # 0
    
    
    <시간>

    장소 :

    df.Req.eq(15)
    0    False
    1    False
    2    False
    3     True
    4    False
    Name: Req, dtype: bool
    
    

    그리고 idxmax  첫 번째 True 의 인덱스를 반환합니다  발생 (이 경우 3 ) .

관련 자료

  • 이전 java - 스프링 통합을 사용하여 POST http 엔드 포인트를 구현하는 방법은 무엇입니까?
  • 다음 javascript - 모카 동기식 "전부"훅 타임 아웃