pandas_function_mapping
함수 적용과 매핑
import pandas as pd
from pandas import Series, DataFrame
import numpy as np
df = DataFrame(np.random.randn(4,3),
columns=list('bde'),
index=['seoul', 'busan', 'daegu', 'incheon'])
df
|
b |
d |
e |
| seoul |
1.308334 |
-1.880615 |
1.231262 |
| busan |
-0.595209 |
-0.737108 |
-0.358211 |
| daegu |
-0.780211 |
0.210827 |
-1.634598 |
| incheon |
0.981662 |
-0.760076 |
-2.558003 |
- numpy.random 모듈에 있는 randn함수는 정규분포 데이터를 생성
- numpy.abs: 절대값으로 표현
df = np.abs(df)
df
|
b |
d |
e |
| seoul |
1.308334 |
1.880615 |
1.231262 |
| busan |
0.595209 |
0.737108 |
0.358211 |
| daegu |
0.780211 |
0.210827 |
1.634598 |
| incheon |
0.981662 |
0.760076 |
2.558003 |
1. 함수의 적용
1) 행에 대해 함수 적용
f = lambda x:x.max() - x.min()
df.apply(f)
b 0.713126
d 1.669789
e 2.199793
dtype: float64
2) 열에 대해 함수 적용
df.apply(f, axis=1)
seoul 0.649353
busan 0.378897
daegu 1.423772
incheon 1.797927
dtype: float64
3) 함수 생성 후 적용
df
|
b |
d |
e |
| seoul |
1.308334 |
1.880615 |
1.231262 |
| busan |
0.595209 |
0.737108 |
0.358211 |
| daegu |
0.780211 |
0.210827 |
1.634598 |
| incheon |
0.981662 |
0.760076 |
2.558003 |
def f(x):
return Series([x.min(), x.max()], index=['min', 'max'])
df.apply(f)
|
b |
d |
e |
| min |
0.595209 |
0.210827 |
0.358211 |
| max |
1.308334 |
1.880615 |
2.558003 |
2. 매핑
df
|
b |
d |
e |
| seoul |
1.308334 |
1.880615 |
1.231262 |
| busan |
0.595209 |
0.737108 |
0.358211 |
| daegu |
0.780211 |
0.210827 |
1.634598 |
| incheon |
0.981662 |
0.760076 |
2.558003 |
format = lambda x: '%.2f' % x
1) DataFrame 객체에 적용: applymap 함수를 이용
df.applymap(format)
|
b |
d |
e |
| seoul |
1.31 |
1.88 |
1.23 |
| busan |
0.60 |
0.74 |
0.36 |
| daegu |
0.78 |
0.21 |
1.63 |
| incheon |
0.98 |
0.76 |
2.56 |
2) Series 객체에 적용: map 함수 이용
df['e'].map(format)
seoul 1.23
busan 0.36
daegu 1.63
incheon 2.56
Name: e, dtype: object