아미(아름다운미소)

a,b,c,d 컬럼으로 groupby 했을때e==b인 row의 f값을취하고 e==b인 row가없을시 null을 넣고 g컬럼을 생성한다 본문

랭귀지/pandas

a,b,c,d 컬럼으로 groupby 했을때e==b인 row의 f값을취하고 e==b인 row가없을시 null을 넣고 g컬럼을 생성한다

유키공 2024. 8. 6. 09:20
import pandas as pd
import numpy as np

# 예시 데이터프레임 생성
data = {
    'a': ['foo', 'foo', 'bar', 'bar', 'foo', 'bar'],
    'b': ['one', 'one', 'two', 'two', 'one', 'two'],
    'c': ['small', 'small', 'large', 'large', 'small', 'large'],
    'd': [1, 1, 2, 2, 1, 2],
    'e': ['one', 'two', 'two', 'one', 'one', 'three'],
    'f': [10, 20, 30, 40, 50, 60]
}

df = pd.DataFrame(data)

# 그룹화 및 f 컬럼 값 추출
def get_f_value(group):
    if (group['e'] == group['b'].iloc[0]).any():  # e가 b와 같은지 확인
        return group.loc[group['e'] == group['b'].iloc[0], 'f'].iloc[0]
    else:
        return np.nan  # 없을 경우 null (NaN)

# g 컬럼 생성
df['g'] = df.groupby(['a', 'b', 'c', 'd']).apply(get_f_value).reset_index(drop=True)

print(df)
Comments