>source

다음 Pandas DataFrame이 있습니다.

 Col1 Col2  Col3
0    A    c   1.0
1    A    c   3.0
2    B    c   5.0
3    A    d   6.0
4    A    c   NaN

다음 함수를 작성하고 있습니다.

replace_missing_with_conditional_mean(df, condition_cols, cols)

열에있는 누락 된 값을 목록의 레이블로 바꾸고 싶습니다. cols .

대체 될 값은 해당 그룹의 비결 측 값의 평균으로 계산됩니다. 그룹은 목록의 레이블이있는 열의 값을 기반으로 형성됩니다. condition_cols .

언제 replace_missing_with_conditional_mean(df, condition_cols=['Col1','Col2'], cols=['Col3']) 인수를 사용하여 위의 데이터 프레임에 적용되면 다음과 같이 산출됩니다.

Col1 Col2  Col3
0    A    c   1.0
1    A    c   3.0
2    B    c   5.0
3    A    d   6.0
4    A    c   2.0

이것은 4 행의 레코드가 그룹에 속하기 때문입니다. A c 평균은 (1 + 3)/2 = 2입니다.

나는 사용해 보았다 df.fillna(df.groupby(condition_cols).transform('mean')) 하지만 그것은 나에게 오류를주고있다

TypeError: Transform function invalid for data types


  • 답변 # 1

    다음과 같은 기능을 구현할 수 있습니다.

    def replace_missing_with_conditional_mean(df, condition_cols, cols):
        s = df.groupby(condition_cols)[cols].transform('mean')
        return df.fillna(s.to_dict('series'))
    
    res = replace_missing_with_conditional_mean(df, ['Col1', 'Col2'], ['Col3'])
    print(res)
    
    

    산출

     Col1 Col2  Col3
    0    A    c   1.0
    1    A    c   3.0
    2    B    c   5.0
    3    A    d   6.0
    4    A    c   2.0
    
    

관련 자료

  • 이전 Haskell에서 목록의 첫 번째 요소를 반환합니다
  • 다음 php - 라 라벨에서 동시에 종자 관계