Boolean selection
- boolean Series 가 []와 함께 사용되면 True 값에 해당하는 값만 새로 반환되는 Series 객체에 포함됨
- 다중조건의 경우, & | 를 사용하여 연결 가능
s = pd.Series(np.arange(10),np.arange(10)+1)
s
s>5
| 0 |
|---|
| 1 | False |
| 2 | False |
| 3 | False |
| 4 | False |
| 5 | False |
| 6 | False |
| 7 | True |
| 8 | True |
| 9 | True |
| 10 | True |
dtype: bool
s[s>5]
dtype: int64
s[s%2==0]
dtype: int64
s.index
>Index([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], dtype='int64')
s.index>5
>**array([False, False, False, False, False, True, True, True, True,
True])
->이게 boolean mask
s[s.index>5]**
dtype: int64
Series 값 삭제: drop()
s=pd.Series(np.arange(100,106),['a','ab','c','d','e','k'])
s
| 0 |
|---|
| a | 100 |
| b | 101 |
| c | 102 |
| d | 103 |
| e | 104 |
| k | 105 |
dtype: int64
s.drop('k')
inplace=
drop() 함수는 drop 한 결과를 새로 만들어서 리턴한거고 원본 데이터 s 는 변경하지 않는다.
numpy,pandas 그밖의 수많은 데이터 관련 모듈들 에서의 대부분의 객체 함수들은 호출한 원본객체를 변경하지는 않고 원본의 사본을 만든 뒤 사본에 연산수행하여 그 사본을 리턴하도록 동작함.
그러나 inplace=True 파라미터를 주면 사본을 만들지 않고 원본을 변화시킨다
s.drop('k',inplace=True)
Slicing
- 리스트, ndarry 와 동일하게 적용한다
- index 가 문자열인 경우 slicing 시 마지막도 포함한다.
s2=pd.Series(np.arange(100,105),['a','b','c','d','e'])
s2[1:3]
s2['b':'d']
Multi level index
s3 = pd.Series([1,2,3,4,5,6],['a','a','b','b','c','c'])
s3
s3.index
>Index(['a', 'a', 'b', 'b', 'c', 'c'], dtype='object')
s4 = pd.Series(np.arange(100,106),index[['a','a','b','b','c','c'],[1,2,1,2,1,2],])
s4
| | 0 |
|---|
| a | 1 | 100 |
| 2 | 101 |
| b | 1 | 102 |
| 2 | 103 |
| c | 1 | 104 |
| 2 | 105 |
s4.index
>
MultiIndex([('a', 1),
('a', 2),
('b', 1),
('b', 2),
('c', 1),
('c', 2)],
)
s4['a',2]
>101
s4['a']
→ s4: 2-level index, s4[’a’]:1-level index
xs() 를 사용한 인덱스
cross-section
s4.xs('a')
s4.xs(2,level=1)
s4.xs(2,level=-1)
s4.xs((2,'b',level=(1,0))
Series 에서 level 별 계산
data = pd.Series(
[100, 200, 300, 400, 500, 600],
index=[
["a", "a", "a", "b", "b", "c"],
[1, 2, 3, 1, 2, 1],
]
)
data
| | 0 |
|---|
| a | 1 | 100 |
| 2 | 200 |
| 3 | 300 |
| b | 1 | 400 |
| 2 | 500 |
| c | 1 | 600 |
data.sum()
>2100
data.mean()
350.0
data.groupby(level=0).sum()