랭귀지/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)