-
파이썬 Pandas DataFrame .groupby<Python>/[DataFrame] 2023. 3. 8. 15:48728x90
Pandas에서는 그룹 단위로 데이터를 처리할 수 있습니다. 이번에는 그룹 단위로 데이터를 정렬하고, 누적 비율을 계산하는 방법과 그룹 단위로 특정 분위수의 위치를 구하는 방법에 대해 알아보겠습니다.
(1) 그룹별로 x 칼럼을 정렬 후 누적 비율을 구하기
그룹 단위로 데이터를 정렬하고 누적 비율을 계산하기 위해서는 groupby 메서드와 cumsum 메서드를 사용할 수 있습니다. 먼저 다음과 같은 DataFrame이 있다고 가정해봅시다.
group x 0 A 1 1 A 2 2 A 3 3 B 4 4 B 5 5 B 6
여기서 group 칼럼을 기준으로 그룹을 지정한 후 x 칼럼을 정렬하고 누적 비율을 계산해보겠습니다.
728x90df.groupby('group')['x'].apply(lambda x: x.sort_values().cumsum() / x.sum())
위 코드에서는 groupby 메서드를 사용하여 group 칼럼을 기준으로 그룹을 지정합니다. 그리고 apply 메서드를 사용하여 각 그룹마다 x 칼럼을 정렬한 후 누적 합을 계산합니다. cumsum 메서드를 사용하여 누적 합을 계산하고, sum 메서드를 사용하여 그룹 내에서 x 칼럼의 합을 계산합니다. 이렇게 계산된 결과는 다음과 같습니다.
group A 0 0.166667 1 0.500000 2 1.000000 B 3 0.166667 4 0.500000 5 1.000000 Name: x, dtype: float64
(2) 그룹별로 특정 분위수의 위치 구하기
그룹 단위로 특정 분위수의 위치를 구하기 위해서는 groupby 메서드와 quantile 메서드를 사용할 수 있습니다. 이번에는 다음과 같은 DataFrame이 있다고 가정해봅시다.
group x 0 A 1 1 A 2 2 A 3 3 B 4 4 B 5 5 B 6
여기서 group 칼럼을 기준으로 그룹을 지정한 후 x 칼럼에서 50% 분위수의 위치를 구해보겠습니다.
df.groupby('group')['x'].quantile(0.5)
이번에는 pandas의 groupby 메서드와 quantile 메서드를 사용하여, 특정 분위수의 위치를 구하는 방법에 대해 알아보겠습니다.
다시 말하면, groupby를 사용하여 특정 칼럼에 따라 그룹을 나눈 후, 해당 그룹에서 quantile 메서드를 사용하여 특정 분위수의 위치를 구할 수 있습니다.
예를 들어, 다음과 같은 데이터프레임이 있다고 가정해 봅시다.
import pandas as pd df = pd.DataFrame({'group': ['A', 'A', 'B', 'B', 'B', 'C', 'C'], 'x': [1, 2, 3, 4, 5, 6, 7]}) df
group x 0 A 1 1 A 2 2 B 3 3 B 4 4 B 5 5 C 6 6 C 7
이제 groupby를 사용하여 group 칼럼을 기준으로 그룹을 나눕니다. 그리고 각 그룹에서 quantile 메서드를 사용하여 50% 분위수의 위치를 구할 수 있습니다.
q = 0.5 # quantile result = df.groupby('group')['x'].quantile(q) result
group A 1.5 B 4.0 C 6.5 Name: x, dtype: float64
위 코드에서 q 변수에 0.5 값을 할당하여 50% 분위수를 구했습니다. 그리고 groupby 메서드를 사용하여 group 칼럼을 기준으로 그룹을 나눈 후, 각 그룹에서 quantile 메서드를 사용하여 50% 분위수의 위치를 구했습니다. 결과는 각 그룹에서 50% 분위수의 위치를 나타내는 Series 객체입니다.
이와 같이 pandas의 groupby 메서드와 quantile 메서드를 함께 사용하여, 특정 분위수의 위치를 그룹별로 쉽게 구할 수 있습니다.
728x90'<Python> > [DataFrame]' 카테고리의 다른 글
파이썬 Pandas DataFrame 칼럼 순서를 변경 (0) 2023.03.08 파이썬 Pandas DataFrame .groupby.apply vsv .agg (0) 2023.03.08 파이썬 Pandas DataFrame .any vs .all (0) 2023.03.08 파이썬 Pandas DataFrame .loc vs .iloc (0) 2023.03.08 파이썬 Pandas DataFrame .filter() like 옵션 (0) 2023.03.07