아미(아름다운미소)

pandas df a,b컬럼을 groupby 했을때c컬럼의합이 0인경우 d컬럼의 알파벳이 제일빠른행에 c행을 1로바꾸기 본문

랭귀지/pandas

pandas df a,b컬럼을 groupby 했을때c컬럼의합이 0인경우 d컬럼의 알파벳이 제일빠른행에 c행을 1로바꾸기

유키공 2024. 8. 14. 16:24
import pandas as pd

# 예시 데이터프레임 생성
data = {
    'a': ['A', 'A', 'B', 'B', 'C'],
    'b': [1, 1, 2, 2, 1],
    'c': [0, 0, 0, 0, 1],
    'd': ['z', 'y', 'x', 'w', 'v']
}
df = pd.DataFrame(data)

# c의 합이 0인 그룹에서 d 컬럼의 알파벳이 가장 빠른 행의 c 값을 1로 변경
# 그룹화하여 c의 합 계산
grouped = df.groupby(['a', 'b'])

# c의 합이 0인 그룹 찾기
mask = grouped['c'].transform('sum') == 0

# 해당 그룹에서 d 컬럼 기준으로 정렬 후 첫 번째 행의 인덱스 찾기
first_alpha_index = df[mask].sort_values(by='d').groupby(['a', 'b']).head(1).index

# c 값을 1로 변경
df.loc[first_alpha_index, 'c'] = 1

print(df)
import pandas as pd

# 예시 데이터프레임 생성
data = {
    'a': ['A', 'A', 'B', 'B', 'C'],
    'b': [1, 1, 2, 2, 1],
    'c': [0, 0, 0, 0, 1],
    'd': ['z', 'y', 'x', 'w', 'v']
}
df = pd.DataFrame(data)

# 그룹화하여 c의 합이 0인 그룹 찾기
grouped = df.groupby(['a', 'b'])

for name, group in grouped:
    if group['c'].sum() == 0:
        # 그룹을 d 컬럼 기준으로 정렬
        sorted_group = group.sort_values(by='d')
        # 알파벳이 가장 빠른 행의 인덱스 찾기
        min_alpha_index = sorted_group.index[0]
        # 해당 행의 c 값을 1로 변경
        df.at[min_alpha_index, 'c'] = 1

print(df)
Comments