TECH_LOG

Python Library_Pandas7 [concat, 피봇테이블, 그룹분석 ] 본문

Programming

Python Library_Pandas7 [concat, 피봇테이블, 그룹분석 ]

HongDaang 2023. 3. 27. 16:38

ABC부트캠프_2023.03.27

 

 


concat 연결

- 기준열을 사용하지 않고 단순히 데이터 연결
- 인덱스 값이 중복 될 수 있음

 

1. 열을 기준으로 연결(아래로)

s1 = pd.Series([0,1], index=['A','B'])
s2 = pd.Series([2,3,4], index = ['A','B','C'])

s1
>>>
A    0
B    1

s2
>>>
A    2
B    3
C    4


pd.concat([s1,s2])
>>>
A    0
B    1
A    2
B    3
C    4

2. 옆으로 연결, axis = 1

 

1) 데이터프레임 생성

df1 = pd.DataFrame(
np. arange(6).reshape(3,2),
index = ['a', 'b', 'c'],
columns = ['데이터1','데이터2'])
df1
>>>
	데이터1	데이터2
a	       0	1
b	       2	3
c	       4	5


df2 = pd.DataFrame(
    5 + np.arange(4).reshape(2, 2),
    index=['a', 'c'],
    columns=['데이터3', '데이터4'])
df2
>>>
	데이터3	데이터4
a	   5	6
c	   7	8

 

2)  열 기준으로 합하기 , axis = 1

pd.concat([df1,df2],axis=1)
>>>
	데이터1	데이터2	데이터3	데이터4
a	0	1	5.0	6.0
b	2	3	NaN	NaN
c	4	5	7.0	8.0

 

 

 


피봇테이블

데이터 열 중에서 두개의 열을 행인덱스, 열인덱스로 사용하여 데이터 구성

1) 데이터 생성

data = {
    "도시": ["서울", "서울", "서울","부산", "부산", "부산", "인천", "인천"],
    "연도": ["2015", "2010", "2005", "2015", "2010", "2005", "2015", "2010"],
    "인구": [9904312, 9631482, 9762546, 3448737, 3393191, 3512547, 2890451, 263203],
    "지역": ["수도권", "수도권", "수도권", "경상권", "경상권","경상권", "수도권", "수도권"]
}
columns = ["도시", "연도", "인구", "지역"]
df1 = pd.DataFrame(data, columns=columns)
df1
>>>
	도시	연도	인구	지역
0	서울	2015	9904312	수도권
1	서울	2010	9631482	수도권
2	서울	2005	9762546	수도권
3	부산	2015	3448737	경상권
4	부산	2010	3393191	경상권
5	부산	2005	3512547	경상권
6	인천	2015	2890451	수도권
7	인천	2010	263203	수도권

2) 도시가 열, 연도가 행 으로 인덱스 구성 _  pivot(행인덱스 ,열인덱스, 데이터)

df1.pivot("도시","연도","인구")
>>>
연도	2005	2010	2015
도시			
부산	3512547.0	3393191.0	3448737.0
서울	9762546.0	9631482.0	9904312.0
인천	NaN	        263203.0	2890451.0

 

 


그룹분석

조건에 맞는 데이터가 하나 일때 그룹분석

키에 의해 결정되는 데이터가 여러개 있을 때 미리 지정한 연산으로 대표값 계산
1. 분석하고자 하는 시리즈나 데이터프레임에 groupby 메서드 호출해서 그룹화
2. 그룹 객체에 대해 그룹연산 수행


그룹연산 메서드


- size, count: 그룹 데이터의 갯수
- mean, median, min, max: 그룹 데이터의 평균, 중앙값, 최소, 최대
- sum, prod, std, var, quantile : 그룹 데이터의 합계, 곱, 표준편차, 분산, 사분위수
- first, last: 그룹 데이터 중 가장 첫번째 데이터와 가장 나중 데이터

 

1. key1의 값에 따른 data1의 평균 구하기

 

1) 데이터 생성

np.random.seed(0)
df2 = pd.DataFrame({
    'key1': ['A','A','B','B','A'],
    'key2': ['one','two','one','two','one'],
    'data1': [1,2,3,4,5],
    'data2': [10,20,30,40,50]
})
df2
>>>
	key1	key2	data1	data2
0	A	one	1	10
1	A	two	2	20
2	B	one	3	30
3	B	two	4	40
4	A	one	5	50

2) 그룹 데이터 생성

groups = df2.groupby(df2.key1)  #그룹 데이터 생성
group
>>>
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002ABEA14F5B0>

3) 인덱스 저장

groups.groups  # 인덱스 저장
>>>
{'A': [0, 1, 4], 'B': [2, 3]}

4)  그룹 데이터의 합계

groups.sum()
>>>
	data1	data2
key1		
A	   8	80
B	   7	70

5)  그룹 클래스 객체를 얻을 필요가 없을 때 연속적으로 호출

df2.data1.groupby(df2.key1).sum() 
>>>
key1
A    8
B    7

6) 복합키(key1,key2)값에 따른 data1의 합계 구할때 리스트사용

df2.data1.groupby([df2.key1,df2.key2]).sum()
>>>
key1  key2
A     one     6
      two     2
B     one     3
      two     4

 

 

Comments