파이썬/데이터분석

pandas duplicate drop시 중복된 값을 평균 만들기

배우고 성장하는 청년 블로그 2023. 2. 13. 16:24

# DataFrame 생성

1
2
3
4
df = pd.DataFrame({
    'kind': ['bus''bus''cake''bus''taxi''taxi'],
    'cnt': [123439
})
cs

초기 DataFrame

# duplicate drop 시 중복된 값을 평균 만들기

1) duplicate drop을 하는 경우에 바로 함수에서 제공하면 좋을 것 같지만 없는 것 같음.

2) 간단한 코드를 구현하여 해결함.

 (1) 먼저 중복되는 값들 확인.

 (2) 평균 값을 계산하여 해당 DataFrame 맨 뒤에 붙임.

 (3) pd.drop_duplicates 함수를 통해 맨 마지막 값만 남기고 나머지는 지움.

3) 해당 코드

1
2
3
4
5
duplicate_list = df.duplicated(subset=['kind'], keep=False)
for d in df[duplicate_list]['kind'].unique():
    mean_value = np.mean(df[df['kind'== d]['cnt'].tolist())
    new_data = pd.DataFrame({'kind': d, 'cnt': mean_value}, index=[0])
    df = pd.concat([df, new_data])
cs

평균값 추가한 DataFrame

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.duplicated.html

 

pandas.DataFrame.duplicated — pandas 1.5.3 documentation

Only consider certain columns for identifying duplicates, by default use all of the columns.

pandas.pydata.org

 

4) 중복된 값 제거 코드

1
df.drop_duplicates(subset='kind', keep='last', inplace=True, ignore_index=True)
cs

- columns은 'kind'로 설정 (subset='kind')
- 마지막 값만 남도록 설정 (keep='last')
- 현재 DataFrame에 덮어쓰기 (inplace=True)
- 현재 index를 무시하고 0 ~ n-1으로 변경 (ignore_index=True)

최종 DataFrame

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop_duplicates.html

 

pandas.DataFrame.drop_duplicates — pandas 1.5.3 documentation

next pandas.DataFrame.droplevel

pandas.pydata.org