아미(아름다운미소)

pandas df에서 a,b,c,d컬럼으로 groupby 했을때 e컬럼이 모두 null이면 1/(해당 row 수) 를 소숫점 5째 자리에서 반올림한 값을 넣어준다 본문

랭귀지/pandas

pandas df에서 a,b,c,d컬럼으로 groupby 했을때 e컬럼이 모두 null이면 1/(해당 row 수) 를 소숫점 5째 자리에서 반올림한 값을 넣어준다

유키공 2024. 8. 7. 13:32
import pandas as pd
import numpy as np

# 예제 데이터 생성
data = {
    'a': ['A', 'A', 'B', 'B', 'C', 'C'],
    'b': [1, 1, 2, 2, 3, 3],
    'c': [5, 5, 6, 6, 7, 7],
    'd': [10, 20, 30, 40, 50, 60],
    'e': [np.nan, np.nan, 3.5, np.nan, np.nan, np.nan]  # A와 C 그룹은 모두 null, B 그룹은 일부 값이 있음
}

df = pd.DataFrame(data)

# 각 그룹의 행 수를 계산
group_sizes = df.groupby(['a', 'b', 'c', 'd'])['e'].transform('size')
null_groups = df.groupby(['a', 'b', 'c', 'd'])['e'].transform(lambda x: x.isnull().all())

# 그룹의 값이 모두 null인 경우에만 값을 변경
df['e'] = np.where(null_groups & (group_sizes > 0), round(1 / group_sizes, 5), df['e'])

# 결과 출력
print("수정된 DataFrame:")
print(df)

# NaN 값을 유지하는 경우를 위해 추가적인 확인
print("\nNaN 값이 있는 행:")
print(df[df['e'].isna()])
Comments