조건으로 검색하기
df = pd.DataFrame(np.random.rand(5, 2), columns=["A", "B"])
#
A B
0 0.793885 0.606616
1 0.102963 0.338295
2 0.216357 0.981374
3 0.905279 0.597836
4 0.802467 0.765217
1. A컬럼값이 0.5보다 작은지 확인하기
df["A"] < 0.5
#
0 False
1 True
2 False
3 True
4 True
2. A컬럼값이 0.5보다 작은값 가져오기
df[df["A"] < 0.5]
#
A B
1 0.279672 0.557540
4 0.149286 0.230602
3. A컬럼값이 0.5보다 작고 B컬럼 값이 0.3보다 큰값
df[(df["A"] < 0.5) & (df["B"] > 0.3)]
#
A B
1 0.008060 0.585319
4 0.302785 0.981112
함수로 데이터 처리하기
df = pd.DataFrame(np.arange(5), columns=["Num"])
#
Num
0 0
1 1
2 2
3 3
4 4
1. apply로 컬럼에 함수 적용
def square(x):
return x**2
df["Num"].apply(square)
#
0 0
1 1
2 4
3 9
4 16
Name: Num, dtype: int64
2. apply와 lambda 동시 사용
df["Num"].apply(lambda x : x ** 2)
#
0 0
1 1
2 4
3 9
4 16
Name: Num, dtype: int64
그룹으로 묶기선언 예제
df = pd.DataFrame({
'key': ['A', 'B', 'C', 'A', 'B', 'C'],
'data1': [1, 2, 3, 1, 2, 3],
'data2': [4, 4, 6, 0, 6, 1]
})
#
key data1 data2
0 A 1 4
1 B 2 4
2 C 3 6
3 A 1 0
4 B 2 6
5 C 3 1
그룹으로 묶기1 (groupby)
1. 묶기선언
df.groupby('key')
#
<pandas.core.groupby.groupby.DataFrameGroupBy object at 0x7f7fad25d320>
2. 묶은후 key기준으로 합계구하기
df.groupby('key').sum()
#
data1 data2
key
A 2 4
B 4 10
C 6 7
3. 묶은후 key와 data1기준으로 묶기
df.groupby(['key','data1']).sum()
#
data2
key data1
A 1 4
B 2 10
C 3 7
그룹으로 묶기2 (aggregate)
1. 'key' 칼럼으로 묶고, data1과 data2 각각의 최솟값, 중앙값, 최댓값을 출력
df.groupby('key').aggregate([min, np.median, max])
#
data1 data2
min median max min median max
key
A 0 1.5 3 0 2.0 4
B 1 2.5 4 4 5.0 6
C 2 3.5 5 1 3.5 6
2. 'key' 칼럼으로 묶고, data1의 최솟값, data2의 합계를 출력
df.groupby('key').aggregate({'data1': min, 'data2': np.sum})
#
data1 data2
key
A 0 4
B 1 10
C 2 7
그룹으로 묶기3 (filter, applying)
1. key별 data2의 평균이 3이 넘는 인덱스만 출력
df.groupby('key').filter(lambda x : x['data2'].mean() > 3)
#
key data1 data2
1 B 1 4
2 C 2 6
4 B 4 6
5 C 5 1
2. 최댓값에서 최솟값을 뺀 값을 적용
df.groupby('key').apply(lambda x : x.max() - x.min())
#
data1 data2
key
A 3 4
B 3 2
C 3 5
계층구조 만들기
1. 인덱스 계층구조
df1 = pd.DataFrame(
np.random.randn(4, 2),
index=[['A', 'A', 'B', 'B'], [1, 2, 1, 2]],
columns=['data1', 'data2']
)
#
data1 data2
A 1 -0.825256 -0.237362
2 0.509839 0.323999
B 1 0.402725 1.093112
2 0.377672 0.594508
2. 컬럼 계층구조
df2 = pd.DataFrame(
np.random.randn(4, 4),
columns=[["A", "A", "B", "B"], ["1", "2", "1", "2"]]
)
#
A B
1 2 1 2
0 -0.702566 1.203842 0.195728 0.856684
1 0.615197 -0.610520 -0.594851 0.659805
2 -0.613920 -0.435007 0.396825 -0.927077
3 0.152187 0.392888 1.287877 -0.394304
3. 명시적 인덱싱을 활용한 df1의 인덱스 출력
df1.loc['A', 1]
#
data1 -0.825256
data2 -0.237362
4. df2의 [A][1] 칼럼 출력
df2["A"]["1"]
#
0 -0.702566
1 0.615197
2 -0.613920
3 0.152187
pivot_table 만들기
1. 데이터 프레임 정보 가져오기
df = pd.read_csv("./data/the_pied_piper_of_hamelin.csv")
#
일차 구분 이름 나이 성별
0 1 Rat Stevne 3 Male
1 1 Rat Christopher 3 Male
2 1 Rat Barbare 1 Female
3 1 Rat Marie 1 Female
....
2. 데이터끼리 묶기
df2 = df.pivot_table(index="일차", columns="성별", values="나이", aggfunc=np.mean)
->
index는 일차별로 묶고,
columns은 성별별로 묶고,
values는 나이를 기준으로 aggfunc를 통해 np.mean(평균값)으로 묶는다.
#
성별 Female Male
일차
1 1.000000 3.000000
2 1.666667 1.875000
3 3.500000 2.250000
4 2.837838 2.448276
5 2.897727 2.731959
6 5.761194 4.557377