반응형
멀티인덱싱
my_header = ['a','b','c']
my_index_zipped = [('G1', 1), ('G1', 2), ('G1', 3), ('G2', 1), ('G2', 2), ('G2', 3)]
my_index = pd.MultiIndex.from_tuples(my_index_zipped)
my_index.names = ['Big','Small']
df = pd.DataFrame(data = np.random.randn(6,3), index = my_index, columns = my_header)
df
==결과==
a b c
Big Small
G1 1 -1.784733 -2.540311 -0.179349
2 -0.389150 0.800740 -0.320251
3 -1.584385 -0.215434 -1.871217
G2 1 -0.117310 -0.713936 0.502615
2 -0.184741 0.202835 -0.229636
3 -0.170846 1.538015 0.073847
- 멀티인덱싱을 활용하면 데이터 프레임의 인덱스를 여러가지로 동시에 설정할 수 있다.
- MultiIndex.from_tuple을 활용해 튜플로부터 인덱스 객체를 만들 수 있다.
- 해당 객체는 인덱스별 이름을 부여할 수 있으며(my_index.name), 데이터프레임 생성시 옵션으로 활용해 부여할 수 있다.
print(df.loc['G1'])
==결과==
a b c
Small
1 -1.784733 -2.540311 -0.179349
2 -0.389150 0.800740 -0.320251
3 -1.584385 -0.215434 -1.871217
- 멀티 인덱싱한 데이터프레임은 말 그대로 인덱스가 여러개 생성된다.
- 따라서 loc을 통해 하나의 인덱스를 풀어도 그 속에 또 인덱스가 존재하게 된다.
groupby와 멀티인덱싱
- groupby는 데이터 프레임을 특정 컬럼의 항목을 기준으로 데이터들을 묶어주는 역할을 한다.
- groupby에 여러개의 컬럼을 할당하면, 해당 컬럼들의 항목들을 기준으로 '멀티인덱싱'하며 데이터들을 묶는다.
name gender age grade absence bloodtype height weight
0 Jared Diamond M 23 3 Y O 165.3 68.2
1 Sarah O'Donnel F 22 2 N AB 170.1 53.0
2 Brian Martin M 24 4 N B 175.0 80.1
...
- 위와 같이 사람들에 대한 데이터가 있다고 하자.
sr = df.groupby(['gender', 'bloodtype','absence']).height.mean()
print(sr)
==결과==
gender bloodtype absence
F A N 176.900000
Y 168.000000
AB N 170.100000
B N 158.200000
O N 164.433333
M A N 165.700000
AB N 181.050000
B N 176.533333
Y 168.600000
O Y 166.200000
Name: height, dtype: float64
- gender, bloodtype, absence 별로 멀티인덱싱 및 그루핑처리해준다.
cf. 그룹별정렬
df.sort_values(by=['absence','bloodtype'], ascending=[True,False])
- 참고로 정렬도 그룹별로 해줄 수 있다.(결과는 생략)
- 'absence','bloodtype' 컬럼을 기준으로 '내림차순','오름차순' 정렬한다.
반응형
'🛠 기타 > Data & AI' 카테고리의 다른 글
Pandas 데이터프레임 pivot table (0) | 2020.07.16 |
---|---|
Pandas 데이터프레임 데이터 별 함수적용 (0) | 2020.07.16 |
[scikit-learn 라이브러리] joblib (pickle 객체 저장) (0) | 2020.07.15 |
[scikit-learn 라이브러리] XOR 문제 (0) | 2020.07.15 |
파이썬 토크나이저 - 기초활용 (0) | 2020.07.15 |