파이썬 판다스 assign 으로 새로운 컬럼 만들기,qcut으로 binning, bucketing 하기
1.Pandas 기초 - 파이썬 판다스 assign 으로 새로운 컬럼 만들기, qcut으로 binning, bucketing 하기
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': range(1, 11), 'B': np.random.randn(10)})
df
A | B | |
---|---|---|
0 | 1 | -2.173554 |
1 | 2 | 0.373508 |
2 | 3 | 2.305635 |
3 | 4 | -0.250364 |
4 | 5 | -1.567004 |
5 | 6 | -0.937419 |
6 | 7 | -0.107459 |
7 | 8 | -1.705911 |
8 | 9 | -0.957453 |
9 | 10 | 0.289418 |
assign()함수에 대한 키워드 인수. DataFrame에 할당 할 열 이름은 키워드 인수로 전달됩니다.
df.assign?
예제 코드: numpy.log()
import numpy as np
arr = [1, np.e, np.e2, np.e3]
print(np.log(arr))
출력:
[0. 1. 2. 3.]
df.assign(ln_A = lambda x: np.log(x.A)).head()
A | B | ln_A | |
---|---|---|---|
0 | 1 | -2.173554 | 0.000000 |
1 | 2 | 0.373508 | 0.693147 |
2 | 3 | 2.305635 | 1.098612 |
3 | 4 | -0.250364 | 1.386294 |
4 | 5 | -1.567004 | 1.609438 |
df.ln_A = np.log(df.A)
df
A | B | |
---|---|---|
0 | 1 | -2.173554 |
1 | 2 | 0.373508 |
2 | 3 | 2.305635 |
3 | 4 | -0.250364 |
4 | 5 | -1.567004 |
5 | 6 | -0.937419 |
6 | 7 | -0.107459 |
7 | 8 | -1.705911 |
8 | 9 | -0.957453 |
9 | 10 | 0.289418 |
cut 함수 / qcut 함수 비교 참고
https://kimdingko-world.tistory.com/209
pd.qcut(df.B, 2, labels=["good", "bad"])
0 good
1 bad
2 bad
3 bad
4 good
5 good
6 bad
7 good
8 good
9 bad
Name: B, dtype: category
Categories (2, object): ['good' < 'bad']
cut 함수와 다르게 qcut 함수는 동일한 갯수로 구간을 나누는 것을 확인할 수 있다.
df.max(axis=0)
A 10.000000
B 2.305635
dtype: float64
df.min(axis=0) # axis=0은 index기준/ axis=1은 컬럼기준
A 1.000000
B -2.173554
dtype: float64
numpy.clip() 사용법
numpy.clip(array, min, max)
array 내의 element들에 대해서
min 값 보다 작은 값들을 min값으로 바꿔주고
max 값 보다 큰 값들을 max값으로 바꿔주는 함수.
예시
import numpy as np
arr1 = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr2 = np.clip(arr1, 3, 7)
print(arr2)
# 결과
[ 3 3 3 3 4 5 6 7 7 7]
df
A | B | |
---|---|---|
0 | 1 | -2.173554 |
1 | 2 | 0.373508 |
2 | 3 | 2.305635 |
3 | 4 | -0.250364 |
4 | 5 | -1.567004 |
5 | 6 | -0.937419 |
6 | 7 | -0.107459 |
7 | 8 | -1.705911 |
8 | 9 | -0.957453 |
9 | 10 | 0.289418 |
df["B"].clip(lower=1,upper=3)
0 1.000000
1 1.000000
2 2.305635
3 1.000000
4 1.000000
5 1.000000
6 1.000000
7 1.000000
8 1.000000
9 1.000000
Name: B, dtype: float64
df["B"].abs()
0 2.173554
1 0.373508
2 2.305635
3 0.250364
4 1.567004
5 0.937419
6 0.107459
7 1.705911
8 0.957453
9 0.289418
Name: B, dtype: float64
»> abs(number)
전달한 숫자의 절대값을 돌려준다.
예제)
정수
abs(-1)
1
실수
abs(-1.75)
1.75