pandas 그룹 그룹과agg 집합의 실례
import pandas as pd
df = pd.DataFrame({'Country':['China','China', 'India', 'India', 'America', 'Japan', 'China', 'India'],
'Income':[10000, 10000, 5000, 5002, 40000, 50000, 8000, 5000],
'Age':[5000, 4321, 1234, 4010, 250, 250, 4500, 4321]})
구성된 데이터는 다음과 같습니다.
Age Country Income
0 5000 China 10000
1 4321 China 10000
2 1234 India 5000
3 4010 India 5002
4 250 America 40000
5 250 Japan 50000
6 4500 China 8000
7 4321 India 5000
그룹화
단일 열 그룹
df_gb = df.groupby('Country')
for index, data in df_gb:
print(index)
print(data)
출력
America
Age Country Income
4 250 America 40000
China
Age Country Income
0 5000 China 10000
1 4321 China 10000
6 4500 China 8000
India
Age Country Income
2 1234 India 5000
3 4010 India 5002
7 4321 India 5000
Japan
Age Country Income
5 250 Japan 50000
다중 열 그룹
df_gb = df.groupby(['Country', 'Income'])
for (index1, index2), data in df_gb:
print((index1, index2))
print(data)
출력
('America', 40000)
Age Country Income
4 250 America 40000
('China', 8000)
Age Country Income
6 4500 China 8000
('China', 10000)
Age Country Income
0 5000 China 10000
1 4321 China 10000
('India', 5000)
Age Country Income
2 1234 India 5000
7 4321 India 5000
('India', 5002)
Age Country Income
3 4010 India 5002
('Japan', 50000)
Age Country Income
5 250 Japan 50000
집합
그룹화 후 데이터 집합
기본적으로 그룹을 나눈 후 다른 열을 집합합니다
df_agg = df.groupby('Country').agg(['min', 'mean', 'max'])
print(df_agg)
출력
Age Income
min mean max min mean max
Country
America 250 250.000000 250 40000 40000.000000 40000
China 4321 4607.000000 5000 8000 9333.333333 10000
India 1234 3188.333333 4321 5000 5000.666667 5002
Japan 250 250.000000 250 50000 50000.000000 50000
그룹화 후의 일부 열을 집합하다
일부 데이터에 대해 서로 다른 집합 작업만 하면 사전을 통해 구축할 수 있다
num_agg = {'Age':['min', 'mean', 'max']}
print(df.groupby('Country').agg(num_agg))
출력
Age
min mean max
Country
America 250 250.000000 250
China 4321 4607.000000 5000
India 1234 3188.333333 4321
Japan 250 250.000000 250
num_agg = {'Age':['min', 'mean', 'max'], 'Income':['min', 'max']}
print(df.groupby('Country').agg(num_agg))
출력
Age Income
min mean max min max
Country
America 250 250.000000 250 40000 40000
China 4321 4607.000000 5000 8000 10000
India 1234 3188.333333 4321 5000 5002
Japan 250 250.000000 250 50000 50000
보충:pandas―매우 완전한 그룹by,agg, 표 데이터에 대한 그룹과 통계나는 이 그룹비를 잘 쓰지 못한다.너무 복잡해.사실 실제로 자주 쓰는 것은 그 몇 개뿐이다.예를 들어 자주 쓰는 것을 거기에 넣으면 쉽게 이해하고 사용할 수 있다.나중에 한 편 더 쓰겠습니다.
그룹by 기능: 그룹
그룹by+agg(집합 함수들): 그룹을 나누면 각 그룹에 함수를 적용합니다. 예를 들어'sum','mean','max','min'...
그룹by 기본 세로 방향 그룹,axis=0
DataFrame
import pandas as pd
import numpy as np
df = pd.DataFrame({'key1':['a', 'a', 'b', 'b', 'a'],
'key2':['one', 'two', 'one', 'two', 'one'],
'data1':np.random.randn(5),
'data2':np.random.randn(5)})
print(df)
data1 data2 key1 key2
0 -0.410122 0.247895 a one
1 -0.627470 -0.989268 a two
2 0.179488 -0.054570 b one
3 -0.299878 -1.640494 b two
4 -0.297191 0.954447 a one
그룹을 나누고 그룹을 교체합니다
list(df.groupby(['key1']))#list :[(group1),(group2),......]
[('a', data1 data2 key1 key2
0 -0.410122 0.247895 a one
1 -0.627470 -0.989268 a two
4 -0.297191 0.954447 a one), ('b', data1 data2 key1 key2
2 0.179488 -0.054570 b one
3 -0.299878 -1.640494 b two)]
list 후 획득: [(group1), (group2),...]모든 데이터 필름 (group) 형식: (name, group) 모듈
1. 키1(하나의 열)에 따라 그룹을 나눈다. 사실은 키1의 값에 따른다
그룹 by 대상은 교체를 지원하여 하나의 이원 그룹을 생성합니다. (그룹 이름, 데이터 블록), (그룹 이름, 데이터 블록)...
for name,group in df.groupby(['key1']):
print(name)
print(group)
a
data1 data2 key1 key2
0 -0.410122 0.247895 a one
1 -0.627470 -0.989268 a two
4 -0.297191 0.954447 a one
b
data1 data2 key1 key2
2 0.179488 -0.054570 b one
3 -0.299878 -1.640494 b two
2. [key1, key2](여러 열)로 그룹화다중 키에 대해 생성된 1조 이원조: (k1, k2), 데이터 블록), (k1, k2), 데이터 블록)...
첫 번째 요소는 키 값으로 구성된 원조이다
for name,group in df.groupby(['key1','key2']):
print(name) #name=(k1,k2)
print(group)
('a', 'one')
data1 data2 key1 key2
0 -0.410122 0.247895 a one
4 -0.297191 0.954447 a one
('a', 'two')
data1 data2 key1 key2
1 -0.62747 -0.989268 a two
('b', 'one')
data1 data2 key1 key2
2 0.179488 -0.05457 b one
('b', 'two')
data1 data2 key1 key2
3 -0.299878 -1.640494 b two
3. 함수별 그룹4. 사전별로 그룹화
5. 색인 레벨별로 그룹화
6. 함수를 수조, 목록, 사전, Series와 혼합하여 사용하는 것도 문제가 되지 않는다. 왜냐하면 모든 것이 결국 수조로 바뀌기 때문이다.
이 데이터 단편을 사전으로 만들다
dict(list(df.groupby(['key1'])))#dict(list())
{'a': data1 data2 key1 key2
0 -0.410122 0.247895 a one
1 -0.627470 -0.989268 a two
4 -0.297191 0.954447 a one, 'b': data1 data2 key1 key2
2 0.179488 -0.054570 b one
3 -0.299878 -1.640494 b two}
조를 나누어 통계, 계산 등을 진행하다1. 그룹을 나누면 그룹 크기가 있는 Series를 반환합니다.
키 1 로 그룹화
df.groupby(['key1']).size()
key1
a 3
b 2
dtype: int64
dict(['a1','x2','e3'])
{'a': '1', 'e': '3', 'x': '2'}
[key1, key2] 키를 눌러 그룹화
df.groupby(['key1','key2']).size()
key1 key2
a one 2
two 1
b one 1
two 1
dtype: int64
2. 데이터1을 키1에 따라 그룹화하고 데이터1열의 평균값을 계산한다
df['data1'].groupby(df['key1']).mean()
#groupby 。
key1
a -0.444928
b -0.060195
Name: data1, dtype: float64
df.groupby(['key1'])['data1'].mean()# : df key1 , df['data1']
# :df.groupby(['key1']).data1.mean()
key1
a -0.444928
b -0.060195
Name: data1, dtype: float64
설명:그룹비는 아무런 계산도 하지 않았습니다.그것은 단지 그룹을 나누었을 뿐이다.
데이터(Series)는 그룹 키에 따라 집합되어 새로운 Series가 생겼습니다. 색인은 키 1열의 유일한 값입니다.
이 인덱스 작업이 반환하는 대상은 그룹화된 DataFrame (목록이나 그룹으로 전송된 경우) 이나 그룹화된 Series
df.groupby(['key1'])['data1'].size()
key1
a 3
b 2
Name: data1, dtype: int64
3. 데이터1에 [key1, key2]를 눌러 그룹을 나누고 데이터1의 평균값을 계산한다
df['data1'].groupby([df['key1'],df['key2']]).mean()
key1 key2
a one -0.353657
two -0.627470
b one 0.179488
two -0.299878
Name: data1, dtype: float64
df.groupby(['key1','key2'])['data1'].mean()
# :df.groupby(['key1','key2']).data1'.mean()
key1 key2
a one -0.353657
two -0.627470
b one 0.179488
two -0.299878
Name: data1, dtype: float64
두 개의 키를 통해 데이터를 그룹화하여 얻은 Series는 하나의 차원화된 인덱스를 가지고 있다(유일한 키 쌍으로 구성).
df.groupby(['key1','key2'])['data1'].mean().unstack()
key2one
two
key1
a
-0.353657
-0.627470
b
0.179488
-0.299878
위의 예에서 그룹 키는 모두 Series입니다.실제로 그룹 키는 길이가 적당한 그룹일 수 있다.매우 유연하다.
가로 방향
열의 데이터 형식(df.dtypes)에 따라 나누다
ff는 모두 두 가지 데이터 형식:float64와object로 나뉘기 때문에 두 그룹(dtype('float64'), (dtype('O'), 데이터)
list(df.groupby(df.dtypes, axis=1))
[(dtype('float64'), data1 data2
0 -0.410122 0.247895
1 -0.627470 -0.989268
2 0.179488 -0.054570
3 -0.299878 -1.640494
4 -0.297191 0.954447), (dtype('O'), key1 key2
0 a one
1 a two
2 b one
3 b two
4 a one)]
agg의 응용그룹by+agg는 그룹by의 결과에 여러 함수를 동시에 적용할 수 있다
SeriesGroupBy 메서드 agg() 매개변수:
aggregate(self, func_or_funcs, * args, ** kwargs)
func: function, string, dictionary, or list of string/functions
반환: aggregated Series
s= pd.Series([10,20,30,40])
s
0 10
1 20
2 30
3 40
dtype: int64
for n,g in s.groupby([1,1,2,2]):
print(n)
print(g)
0 10
1 20
dtype: int64
2
2 30
3 40
dtype: int64
s.groupby([1,1,2,2]).min()
1
1 10
2 30
dtype: int64
# :
s.groupby([1,1,2,2]).agg('min')
1 10
2 30
dtype: int64
s.groupby([1,1,2,2]).agg(['min','max'])# [],func
minmax
일
십
이십
이
삼십
사십
자주 사용:
df
data1data2
key1
key2
0
-0.410122
0.247895
a
one
일
-0.627470
-0.989268
a
two
이
0.179488
-0.054570
b
one
삼
-0.299878
-1.640494
b
two
사
-0.297191
0.954447
a
one
아래를 비교해 보면 agg의 용도를 알 수 있다.
df.groupby(['key1'])['data1'].min()
key1
a -0.627470
b -0.299878
Name: data1, dtype: float64
df.groupby(['key1'])['data1'].agg({'min'})
minkey1
a
-0.627470
b
-0.299878
# √
df.groupby(['key1']).agg({'data1':'min'})# data1 , , data1
data1key1
a
-0.627470
b
-0.299878
# key1 ,aggregate data1 :
df.groupby(['key1'])['data1'].agg({'min','max'})
maxmin
key1
a
-0.297191
-0.627470
b
0.179488
-0.299878
# √
df.groupby(['key1']).agg({'data1':['min','max']})
data1min
max
key1
a
-0.627470
-0.297191
b
-0.299878
0.179488
그룹비의 결과에 대해 열 이름을 수정할 수 있습니다 (이것을 추천하지 않습니다. 뒤에서 따로 열 이름을 바꾸더라도)
# data1, min a,max b
df.groupby(['key1'])['data1'].agg({'a':'min','b':'max'})# 'min' 'max'
d:\python27\lib\site-packages\ipykernel_launcher.py:2: FutureWarning: using a dict on a Series for aggregation
is deprecated and will be removed in a future version
ab
key1
a
-0.627470
-0.297191
b
-0.299878
0.179488
중요 기교: 그룹비 이후 직접.reset_index () 는 다중 인덱스가 없는 DataFrame 을 얻을 수 있습니다.
이후에 df를 통과할 수 있습니다.rename({'old_col1':'new_col1','old_col2':'new_col2',...}) 이름 바꾸기
eg:
df1= df.groupby(['date'])['price'].agg({'sum','count'}).reset_index()
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.만약 잘못이 있거나 완전한 부분을 고려하지 않으신다면 아낌없이 가르침을 주시기 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Pandas】DatetimeIndex란? no.29안녕하세요, 마유미입니다. Pandas에 대한 기사를 시리즈로 작성하고 있습니다. 이번은 제29회의 기사가 됩니다. 에서 Pandas의 시간에 대한 모듈에 대해 씁니다. 이번 기사에서는, 「DatetimeIndex」...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.