>

다음 예제 코드를 입력하십시오 :

import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'],
                   'B' : np.random.randint(0,100,8)})

지금하고 싶은 것은 데이터 프레임에 새 열 C를 추가하는 것입니다.이 열에는 df를 열 A로 그룹화하고 그룹을 B로 정렬하고 B와 B 값의 차이를 계산 한 결과 값이 들어 있습니다 다음과 같은 가치.

몇 줄이라도 가능합니까?


  • 답변 # 1

    sort_values 가 필요하다고 생각합니다   groupby 와 함께  그리고 diff :

    df['C'] = df.sort_values(['A','B']).groupby('A')['B'].diff()
    print (df)
         A   B     C
    0  foo  44  23.0
    1  bar  47  38.0
    2  foo  64  20.0
    3  bar  67  20.0
    4  foo  67   3.0
    5  bar   9   NaN
    6  foo  83  16.0
    7  foo  21   NaN
    
    

    세부 사항 :

    print (df.sort_values(['A','B']))
         A   B
    5  bar   9
    1  bar  47
    3  bar  67
    7  foo  21
    0  foo  44
    2  foo  64
    4  foo  67
    6  foo  83
    print (df.sort_values(['A','B']).groupby('A')['B'].diff())
    5     NaN
    1    38.0
    3    20.0
    7     NaN
    0    23.0
    2    20.0
    4     3.0
    6    16.0
    Name: B, dtype: float64
    
    

    대체 솔루션 :

    df['C'] = (df.groupby('A')['B'] 
                 .apply(lambda x: x.sort_values().diff())
                 .reset_index(level=0, drop=True))
    
    

관련 자료

  • 이전 javascript - 유효성 검사 후 컨트롤러 codeigniter로 리디렉션
  • 다음 javascript - 다른 텍스트 상자의 값을 기반으로 한 텍스트 상자의 값