데이터 사이언스 100번의 노크(구조화 데이터 처리편) – Python Part 1 (Q1 to Q20)의 해설입니다.
데이터 사이언티스트 소사이어티 깃허브 : https://github.com/The-Japan-DataScientist-Society/100knocks-preprocess
데이터 사이언스 100 노크 (구조화된 데이터 처리) URL : https://github.com/The-Japan-DataScientist-Society/100knocks-preprocess/blob/master/docker/work/answer/ans_preprocess_knock_Python.ipynb
– 참고: 원래 데이터 사이언티스트 소사이어티(データサイエンティスト協会スキル定義委員)에서 만든 ipynb 파일을 DeepL 에서 일본어에서 영어로 번역한 파일입니다.
– 이 파일을 업데이트한 이유는 초보자부터 고급 엔지니어까지 Python을 사용하고자 하는 모든 사람에게 유용한 이 실습을 전파하기 위해서입니다.
– 이 데이터는 일본어로 작성되었으므로 연습할 때 언어 문제가 발생할 수 있습니다. 그러나 크게 영향을 미치지 않으므로 걱정하지 마십시오.
처음에
- 먼저 다음 셀을 실행합니다.
- 필요한 라이브러리를 가져오고 데이터베이스에서 데이터를 읽습니다(PostgreSQL).
- 사용할 것으로 예상되는 라이브러리는 다음 셀에서 가져옵니다.
- 사용하려는 다른 라이브러리가 있는 경우 install.packages()를 사용하여 적절하게 설치합니다.
- 이름, 주소 등은 더미 데이터이며 실제 데이터가 아닙니다.
import os
import pandas as pd
import numpy as np
from datetime import datetime, date
from dateutil.relativedelta import relativedelta
import math
import psycopg2
from sqlalchemy import create_engine
from sklearn import preprocessing
from sklearn.impute import SimpleImputer
from sklearn.model_selection import train_test_split
from sklearn.model_selection import TimeSeriesSplit
from imblearn.under_sampling import RandomUnderSampler
if 'PG_PORT' in os.environ:
pgconfig = {
'host': 'db',
'port': os.environ['PG_PORT'],
'database': os.environ['PG_DATABASE'],
'user': os.environ['PG_USER'],
'password': os.environ['PG_PASSWORD'],
}
# pd.read_sql용 커넥터
conn = psycopg2.connect(**pgconfig)
df_customer = pd.read_sql(sql='select * from customer', con=conn)
df_category = pd.read_sql(sql='select * from category', con=conn)
df_product = pd.read_sql(sql='select * from product', con=conn)
df_receipt = pd.read_sql(sql='select * from receipt', con=conn)
df_store = pd.read_sql(sql='select * from store', con=conn)
df_geocode = pd.read_sql(sql='select * from geocode', con=conn)
else:
if not os.path.exists('../data/'):
!git clone https://github.com/The-Japan-DataScientist-Society/100knocks-preprocess
os.chdir('100knocks-preprocess/docker/work/answer')
dtype = {
'customer_id': str,
'gender_cd': str,
'postal_cd': str,
'application_store_cd': str,
'status_cd': str,
'category_major_cd': str,
'category_medium_cd': str,
'category_small_cd': str,
'product_cd': str,
'store_cd': str,
'prefecture_cd': str,
'tel_no': str,
'postal_cd': str,
'street': str
}
df_customer = pd.read_csv("../data/customer.csv", dtype=dtype)
df_category = pd.read_csv("../data/category.csv", dtype=dtype)
df_product = pd.read_csv("../data/product.csv", dtype=dtype)
df_receipt = pd.read_csv("../data/receipt.csv", dtype=dtype)
df_store = pd.read_csv("../data/store.csv", dtype=dtype)
df_geocode = pd.read_csv("../data/geocode.csv", dtype=dtype)
연습문제
P-001: 영수증 내역 데이터(df_receipt)에서 전체 항목 중 첫 10건을 표시하여 어떤 데이터를 보유하고 있는지 목시으로 확인하라.
df_receipt.head(10)
sales_ymd | sales_epoch | store_cd | receipt_no | receipt_sub_no | customer_id | product_cd | quantity | amount | |
---|---|---|---|---|---|---|---|---|---|
0 | 20181103 | 1541203200 | S14006 | 112 | 1 | CS006214000001 | P070305012 | 1 | 158 |
1 | 20181118 | 1542499200 | S13008 | 1132 | 2 | CS008415000097 | P070701017 | 1 | 81 |
2 | 20170712 | 1499817600 | S14028 | 1102 | 1 | CS028414000014 | P060101005 | 1 | 170 |
3 | 20190205 | 1549324800 | S14042 | 1132 | 1 | ZZ000000000000 | P050301001 | 1 | 25 |
4 | 20180821 | 1534809600 | S14025 | 1102 | 2 | CS025415000050 | P060102007 | 1 | 90 |
5 | 20190605 | 1559692800 | S13003 | 1112 | 1 | CS003515000195 | P050102002 | 1 | 138 |
6 | 20181205 | 1543968000 | S14024 | 1102 | 2 | CS024514000042 | P080101005 | 1 | 30 |
7 | 20190922 | 1569110400 | S14040 | 1102 | 1 | CS040415000178 | P070501004 | 1 | 128 |
8 | 20170504 | 1493856000 | S13020 | 1112 | 2 | ZZ000000000000 | P071302010 | 1 | 770 |
9 | 20191010 | 1570665600 | S14027 | 1102 | 1 | CS027514000015 | P071101003 | 1 | 680 |
해설:
df_receipt.head(10) 코드는 df_receipt라는 Pandas DataFrame의 첫 10개의 행을 표시하는 데 사용된다.
Pandas에서 DataFrame은 잠재적으로 서로 다른 데이터 타입의 열을 가진 2차원 레이블이 있는 데이터 구조입니다. 이는 스프레드시트나 SQL의 테이블과 유사하다.
Pandas의 .head() 메서드는 DataFrame의 처음 n개의 행을 표시하는 데 사용된다. 기본적으로 처음 5개 행이 표시됩니다. 이 경우 .head(10)은 DataFrame의 처음 10개의 행을 표시하는 데 사용된다.
P-002: 영수증 내역 데이터(df_receipt)에서 판매일자(sales_ymd), 고객 아이디(customer_id), 상품코드(product_cd), 판매금액(amount)의 순서로 열을 지정하여 10건씩 표시하라.
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']].head(10)
sales_ymd | customer_id | product_cd | amount | |
---|---|---|---|---|
0 | 20181103 | CS006214000001 | P070305012 | 158 |
1 | 20181118 | CS008415000097 | P070701017 | 81 |
2 | 20170712 | CS028414000014 | P060101005 | 170 |
3 | 20190205 | ZZ000000000000 | P050301001 | 25 |
4 | 20180821 | CS025415000050 | P060102007 | 90 |
5 | 20190605 | CS003515000195 | P050102002 | 138 |
6 | 20181205 | CS024514000042 | P080101005 | 30 |
7 | 20190922 | CS040415000178 | P070501004 | 128 |
8 | 20170504 | ZZ000000000000 | P071302010 | 770 |
9 | 20191010 | CS027514000015 | P071101003 | 680 |
해설 :
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']].head(10) 코드는 df_receipt라는 Pandas DataFrame의 컬럼의 하위 집합인 df_receipt의 첫 10개의 행을 표시하는 데 사용됩니다. 에 사용됩니다.
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]라는 코드는 DataFrame df_receipt에서 컬럼의 하위 집합을 선택하는 데 사용된다. 구체적으로 sales_ymd, customer_id, product_cd, amount라는 컬럼이 선택된다.
결과 DataFrame에는 이러한 선택된 컬럼만 포함된다. 그리고 .head(10) 메서드를 사용하여 이 서브셋 DataFrame의 처음 10개의 행을 표시한다.
P-003: 영수증 내역 데이터(df_receipt)에서 매출일자(sales_ymd), 고객 ID(customer_id), 상품코드(product_cd), 매출금액(amount) 순으로 열을 지정하여 10건씩 표시한다. 단, sales_ymdsales_date로 항목명을 변경하면서 추출한다.
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]. \
rename(columns={'sales_ymd': 'sales_date'}).head(10)
sales_date | customer_id | product_cd | amount | |
---|---|---|---|---|
0 | 20181103 | CS006214000001 | P070305012 | 158 |
1 | 20181118 | CS008415000097 | P070701017 | 81 |
2 | 20170712 | CS028414000014 | P060101005 | 170 |
3 | 20190205 | ZZ000000000000 | P050301001 | 25 |
4 | 20180821 | CS025415000050 | P060102007 | 90 |
5 | 20190605 | CS003515000195 | P050102002 | 138 |
6 | 20181205 | CS024514000042 | P080101005 | 30 |
7 | 20190922 | CS040415000178 | P070501004 | 128 |
8 | 20170504 | ZZ000000000000 | P071302010 | 770 |
9 | 20191010 | CS027514000015 | P071101003 | 680 |
해설 :
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']].rename(columns={'sales_ymd': 'sales_date'}).head(10)이라는 코드는 df_ receipt라는 Pandas DataFrame에서 열의 하위 집합을 선택하고, 열 중 하나의 이름을 바꾸고, 결과 DataFrame의 첫 10개의 행을 표시하는 데 사용된다.
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]라는 코드는 DataFrame df_receipt에서 컬럼의 하위 집합을 선택하는 데 사용된다. 구체적으로 sales_ymd, customer_id, product_cd, amount라는 이름의 컬럼을 선택합니다.
그리고 .rename() 메서드를 사용하여 sales_ymd 컬럼의 이름을 sales_date로 변경합니다. 이 메서드는 이름이 변경된 컬럼을 가진 새로운 DataFrame을 반환합니다. 인수 columns={'sales_ymd': 'sales_date'}는 이전 컬럼 이름과 새로운 컬럼 이름을 매핑할 딕셔너리를 지정한다.
마지막으로 .head(10) 메서드를 사용하여 결과 DataFrame의 처음 10개의 행을 표시한다.
P-004: 영수증 내역 데이터(df_receipt)에서 판매일(sales_ymd), 고객 ID(customer_id), 상품 코드(product_cd), 판매 금액(amount) 순으로 열을 지정하고, 다음 조건을 만족하는 데이터를 추출하시오.
- 고객 ID(customer_id)가 “CS018205000001”.
# 코드 예시 1 (query를 사용하는 경우)
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]. \
query('customer_id == "CS018205000001"')
sales_ymd | customer_id | product_cd | amount | |
---|---|---|---|---|
36 | 20180911 | CS018205000001 | P071401012 | 2200 |
9843 | 20180414 | CS018205000001 | P060104007 | 600 |
21110 | 20170614 | CS018205000001 | P050206001 | 990 |
27673 | 20170614 | CS018205000001 | P060702015 | 108 |
27840 | 20190216 | CS018205000001 | P071005024 | 102 |
28757 | 20180414 | CS018205000001 | P071101002 | 278 |
39256 | 20190226 | CS018205000001 | P070902035 | 168 |
58121 | 20190924 | CS018205000001 | P060805001 | 495 |
68117 | 20190226 | CS018205000001 | P071401020 | 2200 |
72254 | 20180911 | CS018205000001 | P071401005 | 1100 |
88508 | 20190216 | CS018205000001 | P040101002 | 218 |
91525 | 20190924 | CS018205000001 | P091503001 | 280 |
해설 :
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']].query('customer_id == "CS018205000001"')라는 코드는 df_receipt라는 Pandas DataFrame에서 customer_id 열이 특정 값(CS0182050001)과 일치하는 행의 하위 집합을 선택하는 데 사용됩니다.
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]라는 코드는 DataFrame df_receipt에서 컬럼의 하위 집합을 선택하는 데 사용됩니다. 구체적으로 sales_ymd, customer_id, product_cd, amount라는 이름의 컬럼을 선택합니다.
그런 다음 .query() 메서드를 사용하여 특정 조건에 따라 DataFrame의 행을 필터링하고 있습니다. 이 경우 조건은 customer_id 열이 "CS018205000001" 값과 같아야 한다는 것입니다. 첫 번째 행 끝에 있는 백슬래시(백슬래시)는 가독성을 높이기 위해 코드를 다음 행으로 이어진다는 의미입니다.
결과 DataFrame에는 customer_id 컬럼이 지정된 값과 일치하는 행만 포함됩니다.
# 코드 예시 1 (query를 사용하지 않는 경우)
df = df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]
df[df['customer_id'] == 'CS018205000001']
sales_ymd | customer_id | product_cd | amount | |
---|---|---|---|---|
36 | 20180911 | CS018205000001 | P071401012 | 2200 |
9843 | 20180414 | CS018205000001 | P060104007 | 600 |
21110 | 20170614 | CS018205000001 | P050206001 | 990 |
27673 | 20170614 | CS018205000001 | P060702015 | 108 |
27840 | 20190216 | CS018205000001 | P071005024 | 102 |
28757 | 20180414 | CS018205000001 | P071101002 | 278 |
39256 | 20190226 | CS018205000001 | P070902035 | 168 |
58121 | 20190924 | CS018205000001 | P060805001 | 495 |
68117 | 20190226 | CS018205000001 | P071401020 | 2200 |
72254 | 20180911 | CS018205000001 | P071401005 | 1100 |
88508 | 20190216 | CS018205000001 | P040101002 | 218 |
91525 | 20190924 | CS018205000001 | P091503001 | 280 |
해설:
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']].query('customer_id == "CS018205000001"')라는 코드는 df_receipt라는 Pandas DataFrame에서 customer_id 열이 특정 값(CS0182050001)과 일치하는 행의 하위 집합을 선택하는 데 사용됩니다.
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]라는 코드는 DataFrame df_receipt에서 컬럼의 하위 집합을 선택하는 데 사용됩니다. 구체적으로 sales_ymd, customer_id, product_cd, amount라는 이름의 컬럼을 선택합니다.
그런 다음 .query() 메서드를 사용하여 특정 조건에 따라 DataFrame의 행을 필터링하고 있습니다. 이 경우 조건은 customer_id 열이 "CS018205000001" 값과 같아야 한다는 것입니다. 첫 번째 행 끝에 있는 백슬래시(백슬래시)는 가독성을 높이기 위해 코드를 다음 행으로 이어진다는 의미입니다.
결과 DataFrame에는 customer_id 컬럼이 지정된 값과 일치하는 행만 포함됩니다.
P-005: 영수증 내역 데이터(df_receipt)에서 판매일(sales_ymd), 고객 ID(customer_id), 상품 코드(product_cd), 판매 금액(amount)의 순서로 열을 지정하고, 아래 조건을 모두 만족하는 데이터를 추출하라.
- 고객 ID(customer_id)가 “CS018205000001”
- 매출 금액(amount)이 1,000 이상
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']] \
.query('customer_id == "CS018205000001" & amount >= 1000')
sales_ymd | customer_id | product_cd | amount | |
---|---|---|---|---|
36 | 20180911 | CS018205000001 | P071401012 | 2200 |
68117 | 20190226 | CS018205000001 | P071401020 | 2200 |
72254 | 20180911 | CS018205000001 | P071401005 | 1100 |
해설:
코드 df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]입니다. \ .query('customer_id == "CS018205000001" & amount >= 1000')는 df_receipt라는 Pandas DataFrame에서 행의 하위 집합을 선택하기 위해 사용되며, 여기서 customer_id 열은 특정 값(CS 018205000001)과 같고, amount 열은 1000 이상이다.
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]라는 코드는 DataFrame df_receipt에서 열의 하위 집합을 선택하는 데 사용된다. 구체적으로 sales_ymd, customer_id, product_cd, amount라는 이름의 컬럼을 선택합니다.
그런 다음 .query() 메서드를 사용하여 여러 조건에 따라 DataFrame의 행을 필터링하고 있습니다. 기호 &는 두 조건 간의 논리적 AND 연산을 나타내기 위해 사용됩니다. 첫 번째 조건은 customer_id 컬럼이 'CS018205000001'과 같아야 한다는 것이고, 두 번째 조건은 amount 컬럼이 1000 이상이어야 한다는 것이다.
결과 DataFrame에는 두 조건이 모두 충족되는 행만 포함됩니다.
P-006: 영수증 내역 데이터(df_receipt)에서 판매일(sales_ymd), 고객 ID(customer_id), 상품 코드(product_cd), 판매 수량(quantity), 판매 금액(amount) 순으로 열을 지정하고, 다음 조건을 모두 만족하는 데이터를 추출하라. 추출하라.
- 고객 ID(customer_id)가 “CS018205000001”.
- 판매금액(amount)이 1,000 이상 또는 판매수량(quantity)이 5 이상
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'quantity', 'amount']].\
query('customer_id == "CS018205000001" & (amount >= 1000 | quantity >=5)')
sales_ymd | customer_id | product_cd | quantity | amount | |
---|---|---|---|---|---|
36 | 20180911 | CS018205000001 | P071401012 | 1 | 2200 |
9843 | 20180414 | CS018205000001 | P060104007 | 6 | 600 |
21110 | 20170614 | CS018205000001 | P050206001 | 5 | 990 |
68117 | 20190226 | CS018205000001 | P071401020 | 1 | 2200 |
72254 | 20180911 | CS018205000001 | P071401005 | 1 | 1100 |
해설:
코드 df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'quantity', 'amount']]. query('customer_id == "CS018205000001" & (amount >= 1000 | quantity >=5)')는 df_receipt라는 Pandas DataFrame에서 고객_id 열이 특정 값(CS018205000001)을 갖는 행의 하위 집합을 선택하는 데 사용됩니다. 이 특정 값(CS018205000001)과 같고, umount 열이 1000 이상 또는 quantity 열이 5 이상이다.
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'quantity', 'amount']]라는 코드는 DataFrame df_receipt에서 열의 하위 집합을 선택하는 데 사용되는 코드이다. 구체적으로 sales_ymd, customer_id, product_cd, quantity, amount라는 컬럼을 선택합니다.
그런 다음 .query() 메서드를 사용하여 여러 조건에 따라 DataFrame의 행을 필터링하고 있습니다. 기호 &는 두 조건 간의 논리적 AND 연산을 나타내기 위해 사용됩니다. 첫 번째 조건은 customer_id 열이 'CS018205000001' 값과 같아야 한다는 것이고, 두 번째 조건은 괄호로 둘러싸여 있고 논리 OR 연산을 나타내는 | 기호로 구분된 두 개의 하위 조건이 포함되어 있습니다. 첫 번째 하위 조건은 금액 열이 1000 이상이고, 두 번째 하위 조건은 quantity 열이 5 이상이다.
결과 DataFrame에는 customer_id가 지정된 값과 같고 amount가 1000 이상, quantity가 5 이상인 행만 포함된다.
P-007: 영수증 내역 데이터(df_receipt)에서 판매일(sales_ymd), 고객 ID(customer_id), 상품 코드(product_cd), 판매 금액(amount)의 순서로 열을 지정하고, 아래 조건을 모두 만족하는 데이터를 추출하라.
- 고객 ID(customer_id)가 “CS018205000001”
- 매출 금액(amount)이 1,000 이상 2,000 이하
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']] \
.query('customer_id == "CS018205000001" & 1000 <= amount <= 2000')
sales_ymd | customer_id | product_cd | amount | |
---|---|---|---|---|
72254 | 20180911 | CS018205000001 | P071401005 | 1100 |
해설:
코드 df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]입니다. \ .query('customer_id == "CS018205000001" & 1000 <= amount <= 2000')는 df_receipt라는 Pandas DataFrame에서 행의 하위 집합을 선택하는 데 사용되며, 여기서 customer_id 열은 특정 값(CS018205000001)과 동일합니다. 값(CS018205000001)과 같고, amount 열은 1000에서 2000(inclusive)까지이다.
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]라는 코드는 DataFrame df_receipt에서 열의 하위 집합을 선택하는 데 사용된다. 구체적으로 sales_ymd, customer_id, product_cd, amount라는 컬럼을 선택합니다.
그런 다음 .query() 메서드를 사용하여 여러 조건에 따라 DataFrame의 행을 필터링하고 있습니다. 기호 &는 두 조건 간의 논리적 AND 연산을 나타내기 위해 사용됩니다. 첫 번째 조건은 customer_id 열이 'CS018205000001' 값과 같아야 한다는 것이고, 두 번째 조건은 비교 연산자 <=와 >=를 사용하여 amount 열의 값 범위를 지정하는 것이다.
완성된 DataFrame에는 customer_id가 지정된 값과 같고 amount가 1000에서 2000 사이인 행만 포함됩니다(포괄적인 값).
P-008: 영수증 내역 데이터(df_receipt)에서 판매일(sales_ymd), 고객 ID(customer_id), 상품 코드(product_cd), 판매 금액(amount)의 순서로 열을 지정하고, 아래 조건을 모두 만족하는 데이터를 추출하라.
- 고객 ID(customer_id)가 “CS018205000001”
- 상품코드(product_cd)가 “P071401019” 이외
df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']] \
.query('customer_id == "CS018205000001" & product_cd != "P071401019"')
sales_ymd | customer_id | product_cd | amount | |
---|---|---|---|---|
36 | 20180911 | CS018205000001 | P071401012 | 2200 |
9843 | 20180414 | CS018205000001 | P060104007 | 600 |
21110 | 20170614 | CS018205000001 | P050206001 | 990 |
27673 | 20170614 | CS018205000001 | P060702015 | 108 |
27840 | 20190216 | CS018205000001 | P071005024 | 102 |
28757 | 20180414 | CS018205000001 | P071101002 | 278 |
39256 | 20190226 | CS018205000001 | P070902035 | 168 |
58121 | 20190924 | CS018205000001 | P060805001 | 495 |
68117 | 20190226 | CS018205000001 | P071401020 | 2200 |
72254 | 20180911 | CS018205000001 | P071401005 | 1100 |
88508 | 20190216 | CS018205000001 | P040101002 | 218 |
91525 | 20190924 | CS018205000001 | P091503001 | 280 |
해설:
코드 df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]입니다. \ df_receipt['customer_id == "CS018205000001" & product_cd ! = "P071401019"]는 Pandas DataFrame의 df_receipt에서 고객_id 열이 특정 값(CS018205000001)과 같고, product_cd 열이 특정 값(P0714019)과 같지 않은 행의 하위 집합을 선택하는 데 사용된다. )와 동일하지 않다.
코드 df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]는 DataFrame df_receipt에서 열의 하위 집합을 선택하는 데 사용한다. 구체적으로 sales_ymd, customer_id, product_cd, amount라는 이름의 컬럼을 선택합니다.
그런 다음 .query() 메서드를 사용하여 여러 조건에 따라 DataFrame의 행을 필터링하고 있습니다. 기호 &는 두 조건 간의 논리적 AND 연산을 나타내기 위해 사용됩니다. 첫 번째 조건은 customer_id 열이 "CS018205000001" 값과 같아야 한다는 것이고, 두 번째 조건은 product_cd 열이 "P071401019" 값과 같지 않아야 한다는 것이며, 이는 ! = 비교 연산자를 사용하여 실현됩니다.
결과 DataFrame에는 customer_id가 지정된 값과 같고 product_cd가 지정된 값과 같지 않은 행만 포함된다.
P-009: 다음 처리에서 출력 결과를 바꾸지 않고 OR을 AND로 다시 작성하시오.
df_store.query('not(prefecture_cd == "13" | floor_area > 900)')
df_store.query('prefecture_cd != "13" & floor_area <= 900')
store_cd | store_name | prefecture_cd | prefecture | address | address_kana | tel_no | longitude | latitude | floor_area | |
---|---|---|---|---|---|---|---|---|---|---|
18 | S14046 | 北山田店 | 14 | 神奈川県 | 神奈川県横浜市都筑区北山田一丁目 | カナガワケンヨコハマシツヅキクキタヤマタイッチョウメ | 045-123-4049 | 139.5916 | 35.56189 | 831.0 |
20 | S14011 | 日吉本町店 | 14 | 神奈川県 | 神奈川県横浜市港北区日吉本町四丁目 | カナガワケンヨコハマシコウホククヒヨシホンチョウヨンチョウメ | 045-123-4033 | 139.6316 | 35.54655 | 890.0 |
38 | S12013 | 習志野店 | 12 | 千葉県 | 千葉県習志野市芝園一丁目 | チバケンナラシノシシバゾノイッチョウメ | 047-123-4002 | 140.0220 | 35.66122 | 808.0 |
해설 :
df_store.query('prefecture_cd ! = "13" & floor_area <= 900')라는 코드는 df_store라는 Pandas DataFrame에서 prefecture_cd 열이 특정 값(13)과 같지 않고, floor_area 열이 특정 값(900) 이하인 행을 필터링하는 데 사용됩니다. 에 사용된다.
.query() 메서드는 부울 식을 기반으로 DataFrame의 행을 필터링하는 데 사용된다. 이 경우 부울 표현식은 'prefecture_cd ! = "13" & floor_area <= 900' 입니다.
! = 연산자는 prefecture_cd 열의 각 값이 '13'과 같지 않은지 확인하는 데 사용된다. 연산자 &는 이 조건과 floor_area 열의 값이 900 이하인지 여부를 확인하는 두 번째 조건 사이의 논리적 AND 연산을 나타내기 위해 사용된다.
결과 DataFrame에는 두 조건이 모두 True인 행만 포함된다.
P-010: 매장 데이터(df_store)에서 매장 코드(store_cd)가 “S14″로 시작하는 항목만 전체 추출하여 10개를 표시하라.
df_store.query("store_cd.str.startswith('S14')", engine='python').head(10)
store_cd | store_name | prefecture_cd | prefecture | address | address_kana | tel_no | longitude | latitude | floor_area | |
---|---|---|---|---|---|---|---|---|---|---|
2 | S14010 | 菊名店 | 14 | 神奈川県 | 神奈川県横浜市港北区菊名一丁目 | カナガワケンヨコハマシコウホククキクナイッチョウメ | 045-123-4032 | 139.6326 | 35.50049 | 1732.0 |
3 | S14033 | 阿久和店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4043 | 139.4961 | 35.45918 | 1495.0 |
4 | S14036 | 相模原中央店 | 14 | 神奈川県 | 神奈川県相模原市中央二丁目 | カナガワケンサガミハラシチュウオウニチョウメ | 042-123-4045 | 139.3716 | 35.57327 | 1679.0 |
7 | S14040 | 長津田店 | 14 | 神奈川県 | 神奈川県横浜市緑区長津田みなみ台五丁目 | カナガワケンヨコハマシミドリクナガツタミナミダイゴチョウメ | 045-123-4046 | 139.4994 | 35.52398 | 1548.0 |
9 | S14050 | 阿久和西店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4053 | 139.4961 | 35.45918 | 1830.0 |
12 | S14028 | 二ツ橋店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区二ツ橋町 | カナガワケンヨコハマシセヤクフタツバシチョウ | 045-123-4042 | 139.4963 | 35.46304 | 1574.0 |
16 | S14012 | 本牧和田店 | 14 | 神奈川県 | 神奈川県横浜市中区本牧和田 | カナガワケンヨコハマシナカクホンモクワダ | 045-123-4034 | 139.6582 | 35.42156 | 1341.0 |
18 | S14046 | 北山田店 | 14 | 神奈川県 | 神奈川県横浜市都筑区北山田一丁目 | カナガワケンヨコハマシツヅキクキタヤマタイッチョウメ | 045-123-4049 | 139.5916 | 35.56189 | 831.0 |
19 | S14022 | 逗子店 | 14 | 神奈川県 | 神奈川県逗子市逗子一丁目 | カナガワケンズシシズシイッチョウメ | 046-123-4036 | 139.5789 | 35.29642 | 1838.0 |
20 | S14011 | 日吉本町店 | 14 | 神奈川県 | 神奈川県横浜市港北区日吉本町四丁目 | カナガワケンヨコハマシコウホククヒヨシホンチョウヨンチョウメ | 045-123-4033 | 139.6316 | 35.54655 | 890.0 |
해설:
df_store.query("store_cd.str.startswith('S14')", engine='python').head(10)라는 코드는 df_store라는 Pandas DataFrame에서 store_cd 열이 특정 문자열 (S14) 로 시작하는 행을 필터링하는 데 사용된다.
.query() 메서드는 DataFrame의 행을 부울 표현식에 따라 필터링하는 데 사용된다. 이 경우 부울 표현식은 'store_cd.str.startswith('S14')'가 된다. 이 표현식은 engine 파라미터가 'python'으로 설정되어 있기 때문에 파이썬 구문으로 작성되어 있다. 이 식은 store_cd 컬럼이 'S14' 문자열로 시작하는지 여부를 확인한다.
str.startswith() 메서드는 Python의 문자열 메서드로, 문자열이 지정된 접두어로 시작하면 True를 반환하는 메서드이다. 이 경우 str.startswith('S14') 메서드가 store_cd 컬럼의 각 요소에 적용된다.
결과 DataFrame에는 store_cd 컬럼의 시작이 'S14' 문자열인 행만 포함된다.
.head(10) 메서드를 사용하여 결과 DataFrame의 처음 10개의 행만 반환합니다.
P-011: 고객 데이터(df_customer)에서 고객 ID(customer_id)의 끝자리가 1인 항목만 전체 추출하여 10건을 표시하라.
df_customer.query("customer_id.str.endswith('1')", engine='python').head(10)
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd | |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | CS037613000071 | 六角 雅彦 | 9 | 不明 | 1952-04-01 | 66 | 136-0076 | 東京都江東区南砂********** | S13037 | 20150414 | 0-00000000-0 |
3 | CS028811000001 | 堀井 かおり | 1 | 女性 | 1933-03-27 | 86 | 245-0016 | 神奈川県横浜市泉区和泉町********** | S14028 | 20160115 | 0-00000000-0 |
14 | CS040412000191 | 川井 郁恵 | 1 | 女性 | 1977-01-05 | 42 | 226-0021 | 神奈川県横浜市緑区北八朔町********** | S14040 | 20151101 | 1-20091025-4 |
31 | CS028314000011 | 小菅 あおい | 1 | 女性 | 1983-11-26 | 35 | 246-0038 | 神奈川県横浜市瀬谷区宮沢********** | S14028 | 20151123 | 1-20080426-5 |
56 | CS039212000051 | 藤島 恵梨香 | 1 | 女性 | 1997-02-03 | 22 | 166-0001 | 東京都杉並区阿佐谷北********** | S13039 | 20171121 | 1-20100215-4 |
59 | CS015412000111 | 松居 奈月 | 1 | 女性 | 1972-10-04 | 46 | 136-0071 | 東京都江東区亀戸********** | S13015 | 20150629 | 0-00000000-0 |
63 | CS004702000041 | 野島 洋 | 0 | 男性 | 1943-08-24 | 75 | 176-0022 | 東京都練馬区向山********** | S13004 | 20170218 | 0-00000000-0 |
74 | CS041515000001 | 栗田 千夏 | 1 | 女性 | 1967-01-02 | 52 | 206-0001 | 東京都多摩市和田********** | S13041 | 20160422 | E-20100803-F |
85 | CS029313000221 | 北条 ひかり | 1 | 女性 | 1987-06-19 | 31 | 279-0011 | 千葉県浦安市美浜********** | S12029 | 20180810 | 0-00000000-0 |
102 | CS034312000071 | 望月 奈央 | 1 | 女性 | 1980-09-20 | 38 | 213-0026 | 神奈川県川崎市高津区久末********** | S14034 | 20160106 | 0-00000000-0 |
해설:
이 코드는 df_customer라는 Pandas DataFrame에서 데이터의 하위 집합을 선택한다. 이 서브셋은 query() 메서드에서 지정한 조건에 따라 필터링됩니다.
조건은 query() 메서드의 인수로 전달되는 문자열 'customer_id.str.endswith('1')'에 의해 정의된다. 이 조건은 df_customer DataFrame의 행 중 customer_id 컬럼의 끝이 '1'인 행만 포함하도록 필터링한다.
engine='python' 파라미터는 선택 사항으로, 조건 평가에 Python 엔진을 사용하도록 지정합니다. query() 메서드의 기본 엔진(pandas.evaluate)이 모든 문자열 연산을 지원하는 것은 아니기 때문에 조건에 문자열 연산이 포함된 경우 이 파라미터를 지정해야 합니다. 포함되는 경우 이 지정이 필요하다.
마지막으로 head(10) 메서드를 사용하여 필터링된 DataFrame의 처음 10줄을 반환한다. 이는 선택 사항이며, 여기서는 출력을 관리하기 쉬운 크기로 제한하는 데 사용됩니다.
P-012: 점포 데이터(df_store)에서 주소(address)에 ‘요코하마시’가 포함된 항목만 모두 표시한다.
df_store.query("address.str.contains('横浜市')", engine='python')
store_cd | store_name | prefecture_cd | prefecture | address | address_kana | tel_no | longitude | latitude | floor_area | |
---|---|---|---|---|---|---|---|---|---|---|
2 | S14010 | 菊名店 | 14 | 神奈川県 | 神奈川県横浜市港北区菊名一丁目 | カナガワケンヨコハマシコウホククキクナイッチョウメ | 045-123-4032 | 139.6326 | 35.50049 | 1732.0 |
3 | S14033 | 阿久和店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4043 | 139.4961 | 35.45918 | 1495.0 |
7 | S14040 | 長津田店 | 14 | 神奈川県 | 神奈川県横浜市緑区長津田みなみ台五丁目 | カナガワケンヨコハマシミドリクナガツタミナミダイゴチョウメ | 045-123-4046 | 139.4994 | 35.52398 | 1548.0 |
9 | S14050 | 阿久和西店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4053 | 139.4961 | 35.45918 | 1830.0 |
12 | S14028 | 二ツ橋店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区二ツ橋町 | カナガワケンヨコハマシセヤクフタツバシチョウ | 045-123-4042 | 139.4963 | 35.46304 | 1574.0 |
16 | S14012 | 本牧和田店 | 14 | 神奈川県 | 神奈川県横浜市中区本牧和田 | カナガワケンヨコハマシナカクホンモクワダ | 045-123-4034 | 139.6582 | 35.42156 | 1341.0 |
18 | S14046 | 北山田店 | 14 | 神奈川県 | 神奈川県横浜市都筑区北山田一丁目 | カナガワケンヨコハマシツヅキクキタヤマタイッチョウメ | 045-123-4049 | 139.5916 | 35.56189 | 831.0 |
20 | S14011 | 日吉本町店 | 14 | 神奈川県 | 神奈川県横浜市港北区日吉本町四丁目 | カナガワケンヨコハマシコウホククヒヨシホンチョウヨンチョウメ | 045-123-4033 | 139.6316 | 35.54655 | 890.0 |
26 | S14048 | 中川中央店 | 14 | 神奈川県 | 神奈川県横浜市都筑区中川中央二丁目 | カナガワケンヨコハマシツヅキクナカガワチュウオウニチョウメ | 045-123-4051 | 139.5758 | 35.54912 | 1657.0 |
40 | S14042 | 新山下店 | 14 | 神奈川県 | 神奈川県横浜市中区新山下二丁目 | カナガワケンヨコハマシナカクシンヤマシタニチョウメ | 045-123-4047 | 139.6593 | 35.43894 | 1044.0 |
52 | S14006 | 葛が谷店 | 14 | 神奈川県 | 神奈川県横浜市都筑区葛が谷 | カナガワケンヨコハマシツヅキククズガヤ | 045-123-4031 | 139.5633 | 35.53573 | 1886.0 |
해설:
구체적으로 query()의 인수로 전달되는 "address.str.contains('요코하마시')라는 문자열로 조건을 정의한다. 이 문자열은 df_store의 address 컬럼에 '요코하마시'라는 부분 문자열이 포함되어 있는지 확인하는 부울 식이다.
str.contains() 메서드는 Pandas의 문자열 메서드로, 주어진 문자열의 각 요소가 지정된 부분 문자열을 포함하는지 여부를 나타내는 부울 배열을 반환한다. 이번에는 df_store의 address 컬럼에 적용해 보겠습니다.
engine='python' 인수는 기본 numexpr 엔진이 아닌 파이썬의 내장된 eval() 함수로 필터링 처리를 수행하도록 지정한다. 이는 str.contains()와 같이 numexpr 엔진에서 지원하지 않는 특정 유형의 문자열 연산을 쿼리 식에서 사용할 때 필요하다.
P-013: 고객 데이터(df_customer)에서 상태코드(status_cd)가 알파벳 A~F로 시작하는 데이터를 모두 추출하여 10건을 표시하라.
df_customer.query("status_cd.str.contains(r'^[A-F]')",
engine='python').head(10)
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd | |
---|---|---|---|---|---|---|---|---|---|---|---|
2 | CS031415000172 | 宇多田 貴美子 | 1 | 女性 | 1976-10-04 | 42 | 151-0053 | 東京都渋谷区代々木********** | S13031 | 20150529 | D-20100325-C |
6 | CS015414000103 | 奥野 陽子 | 1 | 女性 | 1977-08-09 | 41 | 136-0073 | 東京都江東区北砂********** | S13015 | 20150722 | B-20100609-B |
12 | CS011215000048 | 芦田 沙耶 | 1 | 女性 | 1992-02-01 | 27 | 223-0062 | 神奈川県横浜市港北区日吉本町********** | S14011 | 20150228 | C-20100421-9 |
15 | CS029415000023 | 梅田 里穂 | 1 | 女性 | 1976-01-17 | 43 | 279-0043 | 千葉県浦安市富士見********** | S12029 | 20150610 | D-20100918-E |
21 | CS035415000029 | 寺沢 真希 | 9 | 不明 | 1977-09-27 | 41 | 158-0096 | 東京都世田谷区玉川台********** | S13035 | 20141220 | F-20101029-F |
32 | CS031415000106 | 宇野 由美子 | 1 | 女性 | 1970-02-26 | 49 | 151-0053 | 東京都渋谷区代々木********** | S13031 | 20150201 | F-20100511-E |
33 | CS029215000025 | 石倉 美帆 | 1 | 女性 | 1993-09-28 | 25 | 279-0022 | 千葉県浦安市今川********** | S12029 | 20150708 | B-20100820-C |
40 | CS033605000005 | 猪股 雄太 | 0 | 男性 | 1955-12-05 | 63 | 246-0031 | 神奈川県横浜市瀬谷区瀬谷********** | S14033 | 20150425 | F-20100917-E |
44 | CS033415000229 | 板垣 菜々美 | 1 | 女性 | 1977-11-07 | 41 | 246-0021 | 神奈川県横浜市瀬谷区二ツ橋町********** | S14033 | 20150712 | F-20100326-E |
53 | CS008415000145 | 黒谷 麻緒 | 1 | 女性 | 1977-06-27 | 41 | 157-0067 | 東京都世田谷区喜多見********** | S13008 | 20150829 | F-20100622-F |
해설:
df_customer는 DataFrame 객체이다.
.query()는 특정 조건에 따라 행을 필터링하기 위해 Pandas가 제공하는 메소드이다. 조건은 문자열 인수로 지정됩니다.
이 경우 조건은 'status_cd.str.contains(r'^[A-F]')이다. 이는 str.contains() 메서드를 사용하여 DataFrame의 status_cd 컬럼에 A부터 F까지 문자로 시작하는 문자열이 포함되어 있는지(포괄적으로) 검사하는 것이다. 정규 표현식 패턴 '^[A-F]' 앞의 r은 원시 문자열 리터럴을 나타내며, 백슬래시 문자(\)가 이스케이프 문자가 아닌 문자 그대로 해석되도록 보장합니다.
engine='python' 인수는 Pandas가 사용하는 기본 엔진이 아닌 Python의 내장 정규 표현식 엔진을 사용하여 필터링을 수행하도록 지정한다. 이는 기본 엔진이 특정 정규 표현식 기능을 지원하지 않거나 너무 느릴 때 유용하다.
.head(10) 메서드는 필터링된 DataFrame의 처음 10줄만 반환하는 데 사용된다.
즉, 이 코드는 전체적으로 df_customer DataFrame을 필터링하여 status_cd 열이 A부터 F까지의 문자로 시작하는 행만 포함하도록 필터링하고, 그 결과 DataFrame의 처음 10개의 행을 반환한다.
P-014: 고객 데이터(df_customer)에서 상태코드(status_cd)의 끝자리가 숫자 1~9로 끝나는 데이터를 모두 추출하여 10건을 표시하라.
# regex 옵션을 붙일 수도 있다(False로 설정하면 정규표현식이 아닌 그대로의 문자열로 처리됨).
df_customer.query("status_cd.str.contains(r'[1-9]$', regex=True)",
engine='python').head(10)
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd | |
---|---|---|---|---|---|---|---|---|---|---|---|
4 | CS001215000145 | 田崎 美紀 | 1 | 女性 | 1995-03-29 | 24 | 144-0055 | 東京都大田区仲六郷********** | S13001 | 20170605 | 6-20090929-2 |
9 | CS033513000180 | 安斎 遥 | 1 | 女性 | 1962-07-11 | 56 | 241-0823 | 神奈川県横浜市旭区善部町********** | S14033 | 20150728 | 6-20080506-5 |
12 | CS011215000048 | 芦田 沙耶 | 1 | 女性 | 1992-02-01 | 27 | 223-0062 | 神奈川県横浜市港北区日吉本町********** | S14011 | 20150228 | C-20100421-9 |
14 | CS040412000191 | 川井 郁恵 | 1 | 女性 | 1977-01-05 | 42 | 226-0021 | 神奈川県横浜市緑区北八朔町********** | S14040 | 20151101 | 1-20091025-4 |
16 | CS009315000023 | 皆川 文世 | 1 | 女性 | 1980-04-15 | 38 | 154-0012 | 東京都世田谷区駒沢********** | S13009 | 20150319 | 5-20080322-1 |
22 | CS015315000033 | 福士 璃奈子 | 1 | 女性 | 1983-03-17 | 36 | 135-0043 | 東京都江東区塩浜********** | S13015 | 20141024 | 4-20080219-3 |
23 | CS023513000066 | 神戸 そら | 1 | 女性 | 1961-12-17 | 57 | 210-0005 | 神奈川県川崎市川崎区東田町********** | S14023 | 20150915 | 5-20100524-9 |
24 | CS035513000134 | 市川 美帆 | 1 | 女性 | 1960-03-27 | 59 | 156-0053 | 東京都世田谷区桜********** | S13035 | 20150227 | 8-20100711-9 |
27 | CS001515000263 | 高松 夏空 | 1 | 女性 | 1962-11-09 | 56 | 144-0051 | 東京都大田区西蒲田********** | S13001 | 20160812 | 1-20100804-1 |
28 | CS040314000027 | 鶴田 きみまろ | 9 | 不明 | 1986-03-26 | 33 | 226-0027 | 神奈川県横浜市緑区長津田********** | S14040 | 20150122 | 2-20080426-4 |
해설:
df_customer는 DataFrame 객체이다.
.query()는 특정 조건에 따라 행을 필터링하기 위해 Pandas가 제공하는 메소드이다. 조건은 문자열 인수로 지정됩니다.
이 경우 조건은 'status_cd.str.contains(r'[1-9]$', regex=True)가 된다. 이는 str.contains() 메서드를 사용하여 DataFrame의 status_cd 컬럼에 1~9(포함)로 끝나는 문자열이 포함되어 있는지 확인합니다. 문자 $는 문자열의 끝을 나타내며, regex=True 인수는 패턴이 정규 표현식으로 해석될 것임을 나타낸다.
engine='python' 인수는 Pandas가 사용하는 기본 엔진이 아닌 Python의 내장 정규 표현식 엔진을 사용하여 필터링을 수행하도록 지정한다. 이는 기본 엔진이 특정 정규 표현식 기능을 지원하지 않거나 너무 느린 경우에 유용하다.
.head(10) 메서드는 필터링된 DataFrame의 처음 10줄만 반환하는 데 사용된다. 즉, 전체적으로 이 코드는 status_cd 열이 1에서 9까지의 숫자로 끝나는 행만 포함하도록 df_customer DataFrame을 필터링하고 그 결과 DataFrame의 처음 10개의 행을 반환한다.
P-015: 고객 데이터(df_customer)에서 상태코드(status_cd)의 시작이 알파벳 A~F로 시작하고 끝이 숫자 1~9로 끝나는 데이터를 모두 추출하여 10건을 표시하라.
df_customer.query("status_cd.str.contains(r'^[A-F].*[1-9]$')",
engine='python').head(10)
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd | |
---|---|---|---|---|---|---|---|---|---|---|---|
12 | CS011215000048 | 芦田 沙耶 | 1 | 女性 | 1992-02-01 | 27 | 223-0062 | 神奈川県横浜市港北区日吉本町********** | S14011 | 20150228 | C-20100421-9 |
68 | CS022513000105 | 島村 貴美子 | 1 | 女性 | 1962-03-12 | 57 | 249-0002 | 神奈川県逗子市山の根********** | S14022 | 20150320 | A-20091115-7 |
71 | CS001515000096 | 水野 陽子 | 9 | 不明 | 1960-11-29 | 58 | 144-0053 | 東京都大田区蒲田本町********** | S13001 | 20150614 | A-20100724-7 |
122 | CS013615000053 | 西脇 季衣 | 1 | 女性 | 1953-10-18 | 65 | 261-0026 | 千葉県千葉市美浜区幕張西********** | S12013 | 20150128 | B-20100329-6 |
144 | CS020412000161 | 小宮 薫 | 1 | 女性 | 1974-05-21 | 44 | 174-0042 | 東京都板橋区東坂下********** | S13020 | 20150822 | B-20081021-3 |
178 | CS001215000097 | 竹中 あさみ | 1 | 女性 | 1990-07-25 | 28 | 146-0095 | 東京都大田区多摩川********** | S13001 | 20170315 | A-20100211-2 |
252 | CS035212000007 | 内村 恵梨香 | 1 | 女性 | 1990-12-04 | 28 | 152-0023 | 東京都目黒区八雲********** | S13035 | 20151013 | B-20101018-6 |
259 | CS002515000386 | 野田 コウ | 1 | 女性 | 1963-05-30 | 55 | 185-0013 | 東京都国分寺市西恋ケ窪********** | S13002 | 20160410 | C-20100127-8 |
293 | CS001615000372 | 稲垣 寿々花 | 1 | 女性 | 1956-10-29 | 62 | 144-0035 | 東京都大田区南蒲田********** | S13001 | 20170403 | A-20100104-1 |
297 | CS032512000121 | 松井 知世 | 1 | 女性 | 1962-09-04 | 56 | 210-0011 | 神奈川県川崎市川崎区富士見********** | S13032 | 20150727 | A-20100103-5 |
해설:
이 코드에서는 Python의 Pandas 라이브러리를 사용하여 df_customer라는 이름의 DataFrame에서 행을 필터링하고 있다. 필터링은 query() 메서드에서 지정한 조건에 따라 이루어지며, 이 메서드는 부울 식을 나타내는 문자열 인수를 받습니다.
status_cd: df_customer DataFrame의 컬럼이라고 가정한다.
. : 파이썬에서 객체의 메서드나 속성에 접근할 때 사용하는 점 표기법이다.
str: str: status_cd 컬럼의 문자열 메서드를 가리킨다.
contains() : 컬럼의 각 요소에 주어진 부분 문자열 또는 정규 표현식이 존재하는지 확인하는 문자열 메서드이다.
r'^[A-F]. *[1-9]$': 문자 A부터 F(포함)로 시작하고 1부터 9(포함)의 숫자로 끝나는 문자열과 일치하는 정규 표현식 패턴이다. 패턴 앞의 r 접두사는 원시 문자열임을 나타냅니다. 이는 백슬래시가 이스케이프 문자가 아닌 리터럴 백슬래시로 취급된다는 것을 의미한다.
또한, query() 메서드에서 engine의 인수로 'python'이라는 값이 지정되어 있다. 이는 Pandas가 사용하는 기본 엔진이 numexpr로 쿼리 종류에 따라서는 빠르게 처리할 수 있지만, 모든 종류의 정규 표현식을 지원하지 않을 수 있기 때문입니다. 처리되도록 합니다.
마지막으로 .head(10) 메서드를 호출하면 필터 조건과 일치하는 처음 10개의 라인으로 출력이 제한된다.
P-016: 매장 데이터(df_store)에서 전화번호(tel_no)가 3자리-3자리-4자리인 데이터를 모두 표시하라.
df_store.query("tel_no.str.contains(r'^[0-9]{3}-[0-9]{3}-[0-9]{4}$')",
engine='python')
store_cd | store_name | prefecture_cd | prefecture | address | address_kana | tel_no | longitude | latitude | floor_area | |
---|---|---|---|---|---|---|---|---|---|---|
0 | S12014 | 千草台店 | 12 | 千葉県 | 千葉県千葉市稲毛区千草台一丁目 | チバケンチバシイナゲクチグサダイイッチョウメ | 043-123-4003 | 140.1180 | 35.63559 | 1698.0 |
1 | S13002 | 国分寺店 | 13 | 東京都 | 東京都国分寺市本多二丁目 | トウキョウトコクブンジシホンダニチョウメ | 042-123-4008 | 139.4802 | 35.70566 | 1735.0 |
2 | S14010 | 菊名店 | 14 | 神奈川県 | 神奈川県横浜市港北区菊名一丁目 | カナガワケンヨコハマシコウホククキクナイッチョウメ | 045-123-4032 | 139.6326 | 35.50049 | 1732.0 |
3 | S14033 | 阿久和店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4043 | 139.4961 | 35.45918 | 1495.0 |
4 | S14036 | 相模原中央店 | 14 | 神奈川県 | 神奈川県相模原市中央二丁目 | カナガワケンサガミハラシチュウオウニチョウメ | 042-123-4045 | 139.3716 | 35.57327 | 1679.0 |
7 | S14040 | 長津田店 | 14 | 神奈川県 | 神奈川県横浜市緑区長津田みなみ台五丁目 | カナガワケンヨコハマシミドリクナガツタミナミダイゴチョウメ | 045-123-4046 | 139.4994 | 35.52398 | 1548.0 |
9 | S14050 | 阿久和西店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4053 | 139.4961 | 35.45918 | 1830.0 |
11 | S13052 | 森野店 | 13 | 東京都 | 東京都町田市森野三丁目 | トウキョウトマチダシモリノサンチョウメ | 042-123-4030 | 139.4383 | 35.55293 | 1087.0 |
12 | S14028 | 二ツ橋店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区二ツ橋町 | カナガワケンヨコハマシセヤクフタツバシチョウ | 045-123-4042 | 139.4963 | 35.46304 | 1574.0 |
16 | S14012 | 本牧和田店 | 14 | 神奈川県 | 神奈川県横浜市中区本牧和田 | カナガワケンヨコハマシナカクホンモクワダ | 045-123-4034 | 139.6582 | 35.42156 | 1341.0 |
18 | S14046 | 北山田店 | 14 | 神奈川県 | 神奈川県横浜市都筑区北山田一丁目 | カナガワケンヨコハマシツヅキクキタヤマタイッチョウメ | 045-123-4049 | 139.5916 | 35.56189 | 831.0 |
19 | S14022 | 逗子店 | 14 | 神奈川県 | 神奈川県逗子市逗子一丁目 | カナガワケンズシシズシイッチョウメ | 046-123-4036 | 139.5789 | 35.29642 | 1838.0 |
20 | S14011 | 日吉本町店 | 14 | 神奈川県 | 神奈川県横浜市港北区日吉本町四丁目 | カナガワケンヨコハマシコウホククヒヨシホンチョウヨンチョウメ | 045-123-4033 | 139.6316 | 35.54655 | 890.0 |
21 | S13016 | 小金井店 | 13 | 東京都 | 東京都小金井市本町一丁目 | トウキョウトコガネイシホンチョウイッチョウメ | 042-123-4015 | 139.5094 | 35.70018 | 1399.0 |
22 | S14034 | 川崎野川店 | 14 | 神奈川県 | 神奈川県川崎市宮前区野川 | カナガワケンカワサキシミヤマエクノガワ | 044-123-4044 | 139.5998 | 35.57693 | 1318.0 |
26 | S14048 | 中川中央店 | 14 | 神奈川県 | 神奈川県横浜市都筑区中川中央二丁目 | カナガワケンヨコハマシツヅキクナカガワチュウオウニチョウメ | 045-123-4051 | 139.5758 | 35.54912 | 1657.0 |
27 | S12007 | 佐倉店 | 12 | 千葉県 | 千葉県佐倉市上志津 | チバケンサクラシカミシヅ | 043-123-4001 | 140.1452 | 35.71872 | 1895.0 |
28 | S14026 | 辻堂西海岸店 | 14 | 神奈川県 | 神奈川県藤沢市辻堂西海岸二丁目 | カナガワケンフジサワシツジドウニシカイガンニチョウメ | 046-123-4040 | 139.4466 | 35.32464 | 1732.0 |
29 | S13041 | 八王子店 | 13 | 東京都 | 東京都八王子市大塚 | トウキョウトハチオウジシオオツカ | 042-123-4026 | 139.4235 | 35.63787 | 810.0 |
31 | S14049 | 川崎大師店 | 14 | 神奈川県 | 神奈川県川崎市川崎区中瀬三丁目 | カナガワケンカワサキシカワサキクナカゼサンチョウメ | 044-123-4052 | 139.7327 | 35.53759 | 962.0 |
32 | S14023 | 川崎店 | 14 | 神奈川県 | 神奈川県川崎市川崎区本町二丁目 | カナガワケンカワサキシカワサキクホンチョウニチョウメ | 044-123-4037 | 139.7028 | 35.53599 | 1804.0 |
33 | S13018 | 清瀬店 | 13 | 東京都 | 東京都清瀬市松山一丁目 | トウキョウトキヨセシマツヤマイッチョウメ | 042-123-4017 | 139.5178 | 35.76885 | 1220.0 |
35 | S14027 | 南藤沢店 | 14 | 神奈川県 | 神奈川県藤沢市南藤沢 | カナガワケンフジサワシミナミフジサワ | 046-123-4041 | 139.4896 | 35.33762 | 1521.0 |
36 | S14021 | 伊勢原店 | 14 | 神奈川県 | 神奈川県伊勢原市伊勢原四丁目 | カナガワケンイセハラシイセハラヨンチョウメ | 046-123-4035 | 139.3129 | 35.40169 | 962.0 |
37 | S14047 | 相模原店 | 14 | 神奈川県 | 神奈川県相模原市千代田六丁目 | カナガワケンサガミハラシチヨダロクチョウメ | 042-123-4050 | 139.3748 | 35.55959 | 1047.0 |
38 | S12013 | 習志野店 | 12 | 千葉県 | 千葉県習志野市芝園一丁目 | チバケンナラシノシシバゾノイッチョウメ | 047-123-4002 | 140.0220 | 35.66122 | 808.0 |
40 | S14042 | 新山下店 | 14 | 神奈川県 | 神奈川県横浜市中区新山下二丁目 | カナガワケンヨコハマシナカクシンヤマシタニチョウメ | 045-123-4047 | 139.6593 | 35.43894 | 1044.0 |
42 | S12030 | 八幡店 | 12 | 千葉県 | 千葉県市川市八幡三丁目 | チバケンイチカワシヤワタサンチョウメ | 047-123-4005 | 139.9240 | 35.72318 | 1162.0 |
44 | S14025 | 大和店 | 14 | 神奈川県 | 神奈川県大和市下和田 | カナガワケンヤマトシシモワダ | 046-123-4039 | 139.4680 | 35.43414 | 1011.0 |
45 | S14045 | 厚木店 | 14 | 神奈川県 | 神奈川県厚木市中町二丁目 | カナガワケンアツギシナカチョウニチョウメ | 046-123-4048 | 139.3651 | 35.44182 | 980.0 |
47 | S12029 | 東野店 | 12 | 千葉県 | 千葉県浦安市東野一丁目 | チバケンウラヤスシヒガシノイッチョウメ | 047-123-4004 | 139.8968 | 35.65086 | 1101.0 |
49 | S12053 | 高洲店 | 12 | 千葉県 | 千葉県浦安市高洲五丁目 | チバケンウラヤスシタカスゴチョウメ | 047-123-4006 | 139.9176 | 35.63755 | 1555.0 |
51 | S14024 | 三田店 | 14 | 神奈川県 | 神奈川県川崎市多摩区三田四丁目 | カナガワケンカワサキシタマクミタヨンチョウメ | 044-123-4038 | 139.5424 | 35.60770 | 972.0 |
52 | S14006 | 葛が谷店 | 14 | 神奈川県 | 神奈川県横浜市都筑区葛が谷 | カナガワケンヨコハマシツヅキククズガヤ | 045-123-4031 | 139.5633 | 35.53573 | 1886.0 |
해설:
이 코드에서는 Python의 Pandas 라이브러리를 사용하여 df_store라는 DataFrame에서 행을 필터링하고 있다. 필터링은 query() 메서드에서 지정한 조건에 따라 이루어지며, 이 메서드는 부울 식을 나타내는 문자열 인수를 받습니다.
tel_no : df_store DataFrame의 컬럼이라고 가정한다.
. : 파이썬에서 객체의 메서드나 속성에 접근할 때 사용하는 점 표기법이다.
str : tel_no 컬럼의 문자열 메서드를 참조한다.
contains() : 컬럼의 각 요소에 주어진 부분 문자열 또는 정규 표현식이 존재하는지 확인하는 문자열 메서드이다.
r'^[0-9]{3}-[0-9]{3}-[0-9]{3}-[0-9]{4}$' : 북미 전화번호 형식(3자리, 하이픈, 추가 3자리, 추가 3자리, 추가 하이픈, 추가 4자리)의 문자열과 일치하는 정규식 패턴이다. 패턴 앞의 r 접두사는 원시 문자열임을 나타내며, 이는 백슬래시가 이스케이프 문자가 아닌 리터럴 백슬래시로 취급된다는 것을 의미한다. 중괄호 {}는 직전 패턴을 지정한 횟수만큼 반복한다는 것을 나타내며, 마지막 $는 문자열의 끝을 의미한다.
또한, query() 메서드에서 engine의 인수에 'python'이라는 값이 지정되어 있다. 이는 Pandas가 사용하는 기본 엔진이 numexpr로 쿼리 종류에 따라서는 빠르게 처리할 수 있지만, 모든 종류의 정규 표현식을 지원하지 않을 수 있기 때문이다. 처리하게 됩니다.
그 결과, df_store DataFrame에서 tel_no 컬럼에 유효한 북미 전화번호를 가진 행만 남기는 필터가 생성된다.
P-017: 고객 데이터(df_customer)를 생년월일(birth_day)을 기준으로 나이순으로 정렬하고, 맨 위부터 10개의 항목을 모두 표시하라.
df_customer.sort_values('birth_day').head(10)
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd | |
---|---|---|---|---|---|---|---|---|---|---|---|
18817 | CS003813000014 | 村山 菜々美 | 1 | 女性 | 1928-11-26 | 90 | 182-0007 | 東京都調布市菊野台********** | S13003 | 20160214 | 0-00000000-0 |
12328 | CS026813000004 | 吉村 朝陽 | 1 | 女性 | 1928-12-14 | 90 | 251-0043 | 神奈川県藤沢市辻堂元町********** | S14026 | 20150723 | 0-00000000-0 |
15682 | CS018811000003 | 熊沢 美里 | 1 | 女性 | 1929-01-07 | 90 | 204-0004 | 東京都清瀬市野塩********** | S13018 | 20150403 | 0-00000000-0 |
15302 | CS027803000004 | 内村 拓郎 | 0 | 男性 | 1929-01-12 | 90 | 251-0031 | 神奈川県藤沢市鵠沼藤が谷********** | S14027 | 20151227 | 0-00000000-0 |
1681 | CS013801000003 | 天野 拓郎 | 0 | 男性 | 1929-01-15 | 90 | 274-0824 | 千葉県船橋市前原東********** | S12013 | 20160120 | 0-00000000-0 |
7511 | CS001814000022 | 鶴田 里穂 | 1 | 女性 | 1929-01-28 | 90 | 144-0045 | 東京都大田区南六郷********** | S13001 | 20161012 | A-20090415-7 |
2378 | CS016815000002 | 山元 美紀 | 1 | 女性 | 1929-02-22 | 90 | 184-0005 | 東京都小金井市桜町********** | S13016 | 20150629 | C-20090923-C |
4680 | CS009815000003 | 中田 里穂 | 1 | 女性 | 1929-04-08 | 89 | 154-0014 | 東京都世田谷区新町********** | S13009 | 20150421 | D-20091021-E |
16070 | CS005813000015 | 金谷 恵梨香 | 1 | 女性 | 1929-04-09 | 89 | 165-0032 | 東京都中野区鷺宮********** | S13005 | 20150506 | 0-00000000-0 |
6305 | CS012813000013 | 宇野 南朋 | 1 | 女性 | 1929-04-09 | 89 | 231-0806 | 神奈川県横浜市中区本牧町********** | S14012 | 20150712 | 0-00000000-0 |
해설:
이 코드에서는 Python의 Pandas 라이브러리를 사용하여 df_customer라는 DataFrame의 행을 birth_day 열의 값을 기준으로 오름차순으로 정렬하고 있다. 결과적으로 정렬된 DataFrame은 head() 메서드를 사용하여 처음 10개의 행으로 제한됩니다.
df_customer: 정렬될 DataFrame의 이름이다.
sort_values() : 하나 이상의 컬럼 값을 기준으로 DataFrame을 정렬하는 데 사용되는 Pandas의 메소드이다. 이 경우 birth_day 컬럼이 정렬 키로 지정되어 있다.
'birth_day' : 정렬 키로 사용되는 컬럼의 이름이다.
.head(10) : 출력을 정렬된 DataFrame의 첫 10행으로 제한하는 메서드 호출이다.
결과적으로 df_customer DataFrame의 첫 10개의 행이 birth_day 컬럼의 값을 기준으로 오름차순으로 정렬된 상태로 출력됩니다. 이를 통해 birth_day가 고객의 생년월일을 나타낸다고 가정할 때, 데이터 집합에서 가장 오래된 10명의 고객을 확인할 수 있습니다.
P-018: 고객 데이터(df_customer)를 생년월일(birth_day)을 기준으로 젊은 순서로 정렬하고, 맨 위부터 10개의 항목을 모두 표시하라.
df_customer.sort_values('birth_day', ascending=False).head(10)
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd | |
---|---|---|---|---|---|---|---|---|---|---|---|
15639 | CS035114000004 | 大村 美里 | 1 | 女性 | 2007-11-25 | 11 | 156-0053 | 東京都世田谷区桜********** | S13035 | 20150619 | 6-20091205-6 |
7468 | CS022103000002 | 福山 はじめ | 9 | 不明 | 2007-10-02 | 11 | 249-0006 | 神奈川県逗子市逗子********** | S14022 | 20160909 | 0-00000000-0 |
10745 | CS002113000009 | 柴田 真悠子 | 1 | 女性 | 2007-09-17 | 11 | 184-0014 | 東京都小金井市貫井南町********** | S13002 | 20160304 | 0-00000000-0 |
19811 | CS004115000014 | 松井 京子 | 1 | 女性 | 2007-08-09 | 11 | 165-0031 | 東京都中野区上鷺宮********** | S13004 | 20161120 | 1-20081231-1 |
7039 | CS002114000010 | 山内 遥 | 1 | 女性 | 2007-06-03 | 11 | 184-0015 | 東京都小金井市貫井北町********** | S13002 | 20160920 | 6-20100510-1 |
3670 | CS025115000002 | 小柳 夏希 | 1 | 女性 | 2007-04-18 | 11 | 245-0018 | 神奈川県横浜市泉区上飯田町********** | S14025 | 20160116 | D-20100913-D |
12493 | CS002113000025 | 広末 まなみ | 1 | 女性 | 2007-03-30 | 12 | 184-0015 | 東京都小金井市貫井北町********** | S13002 | 20171030 | 0-00000000-0 |
15977 | CS033112000003 | 長野 美紀 | 1 | 女性 | 2007-03-22 | 12 | 245-0051 | 神奈川県横浜市戸塚区名瀬町********** | S14033 | 20150606 | 0-00000000-0 |
5716 | CS007115000006 | 福岡 瞬 | 1 | 女性 | 2007-03-10 | 12 | 285-0845 | 千葉県佐倉市西志津********** | S12007 | 20151118 | F-20101016-F |
15097 | CS014113000008 | 矢口 莉緒 | 1 | 女性 | 2007-03-05 | 12 | 260-0041 | 千葉県千葉市中央区東千葉********** | S12014 | 20150622 | 3-20091108-6 |
해설:
이 코드에서는 Python의 Pandas 라이브러리를 사용하여 df_customer라는 DataFrame의 행을 birth_day 열의 값을 기준으로 내림차순으로 정렬하고 있다. 결과적으로 정렬된 DataFrame은 head() 메서드를 사용하여 처음 10개의 행으로 제한됩니다.
df_customer: 정렬될 DataFrame의 이름입니다.
sort_values() : Pandas의 메소드이며, 하나 이상의 컬럼 값을 기준으로 DataFrame을 정렬하는 데 사용됩니다. 이 경우, birth_day 컬럼이 정렬 키로 지정되어 있습니다.
'birth_day' : 정렬 키로 사용될 컬럼의 이름입니다.
ascending=False : 이 인수는 정렬 순서를 기본 오름차순이 아닌 내림차순으로 지정하는 데 사용된다.
.head(10): 출력을 정렬된 DataFrame의 처음 10행으로 제한하는 메서드 호출이다.
결과적으로 출력되는 것은 df_customer DataFrame의 처음 10개의 행이며, birth_day 열의 값을 기준으로 내림차순으로 정렬된다. 이를 통해 birth_day가 고객의 생년월일을 나타낸다고 가정할 때, 데이터 세트에서 가장 어린 10명의 고객을 확인할 수 있습니다.
P-019: 영수증 내역 데이터(df_receipt)에 대해 건당 매출 금액(amount)이 높은 순서대로 순위를 부여하고, 맨 위부터 10건씩 표시한다. 항목은 고객 ID(customer_id), 매출 금액(amount), 부여한 랭크를 표시하도록 한다. 단, 매출액(amount)이 동일한 경우 동일한 순위를 부여한다.
df_tmp = pd.concat([df_receipt[['customer_id', 'amount']]
,df_receipt['amount'].rank(method='min',
ascending=False)], axis=1)
df_tmp.columns = ['customer_id', 'amount', 'ranking']
df_tmp.sort_values('ranking').head(10)
customer_id | amount | ranking | |
---|---|---|---|
1202 | CS011415000006 | 10925 | 1.0 |
62317 | ZZ000000000000 | 6800 | 2.0 |
54095 | CS028605000002 | 5780 | 3.0 |
4632 | CS015515000034 | 5480 | 4.0 |
72747 | ZZ000000000000 | 5480 | 4.0 |
10320 | ZZ000000000000 | 5480 | 4.0 |
97294 | CS021515000089 | 5440 | 7.0 |
28304 | ZZ000000000000 | 5440 | 7.0 |
92246 | CS009415000038 | 5280 | 9.0 |
68553 | CS040415000200 | 5280 | 9.0 |
해설:
주어진 코드는 다음과 같은 처리를 수행하고 있다.
pd.concat() 함수를 사용하여 두 개의 데이터 프레임 df_receipt[['customer_id', 'amount']]와 df_receipt['amount'].rank(method='min', ascending=False)를 열 축(axis= 1)을 따라 연결하고 있다. 얻어진 데이터 프레임은 변수 df_tmp에 할당된다. 첫 번째 dataframe df_receipt[['customer_id', 'amount']]에는 더 큰 dataframe df_receipt에서 'customer_id'와 'amount' 두 개의 열이 포함되어 있고, 두 번째 dataframe은 ' min' 방식으로 계산한 'amount' 열의 내림차순 순위를 담고 있다.
연결된 df_tmp의 컬럼을 df_tmp.columns 속성을 사용하여 'customer_id', 'amount', 'ranking'으로 이름을 바꾼다.
sort_values() 메서드로 df_tmp의 데이터 프레임을 'ranking' 열에서 오름차순으로 정렬하고, head(10) 메서드로 상위 10개의 행을 반환한다.
전체적으로 이 코드는 df_receipt dataframe의 'customer_id'와 'amount' 컬럼과 'min' 메서드로 계산한 'amount'의 순위를 내림차순으로 연결하고 있다. 결과 dataframe은 'ranking' 컬럼으로 정렬되어 가장 높은 순위를 가진 상위 10개의 행을 반환합니다. 이는 구매에 가장 많은 비용을 지출한 고객을 나타냅니다.
P-020: 영수증 내역 데이터(df_receipt)에 대해 건당 매출 금액(amount)이 높은 순서대로 순위를 부여하고, 맨 위부터 10건씩 표시한다. 항목은 고객 ID(customer_id), 매출 금액(amount), 부여한 순위를 표시한다. 단, 매출금액(amount)이 동일한 경우에도 별도의 순위를 부여해야 한다.
df_tmp = pd.concat([df_receipt[['customer_id', 'amount']]
,df_receipt['amount'].rank(method='first',
ascending=False)], axis=1)
df_tmp.columns = ['customer_id', 'amount', 'ranking']
df_tmp.sort_values('ranking').head(10)
customer_id | amount | ranking | |
---|---|---|---|
1202 | CS011415000006 | 10925 | 1.0 |
62317 | ZZ000000000000 | 6800 | 2.0 |
54095 | CS028605000002 | 5780 | 3.0 |
4632 | CS015515000034 | 5480 | 4.0 |
10320 | ZZ000000000000 | 5480 | 5.0 |
72747 | ZZ000000000000 | 5480 | 6.0 |
28304 | ZZ000000000000 | 5440 | 7.0 |
97294 | CS021515000089 | 5440 | 8.0 |
596 | CS015515000083 | 5280 | 9.0 |
11275 | CS017414000114 | 5280 | 10.0 |
해설:
주어진 코드는 다음과 같은 처리를 수행하고 있다.
pd.concat() 함수를 사용하여 두 개의 데이터 프레임 df_receipt[['customer_id', 'amount']]와 df_receipt['amount'].rank(method='first', ascending=False)를 열축( axis=1)로 연결하고 있습니다. 얻어진 데이터 프레임은 변수 df_tmp에 대입된다. 첫 번째 dataframe df_receipt[['customer_id', 'amount']]에는 더 큰 dataframe df_receipt에서 'customer_id'와 'amount' 두 개의 열이 포함되어 있지만, 두 번째 dataframe은 ' first' 방식으로 계산한 'amount' 열을 내림차순으로 순위를 매긴 것이다.
연결된 df_tmp의 열을 df_tmp.columns 속성을 사용하여 'customer_id', 'amount', 'ranking'으로 이름을 바꾼다.
sort_values() 메서드로 df_tmp의 데이터 프레임을 'ranking' 열에서 오름차순으로 정렬하고, head(10) 메서드로 상위 10개의 행을 반환한다.
전체적으로 이 코드는 df_receipt dataframe의 'customer_id'와 'amount' 컬럼과 'first' 메서드로 계산한 'amount'의 순위를 내림차순으로 연결하고 있습니다. 완성된 dataframe은 'ranking' 컬럼으로 정렬되어 가장 높은 순위를 가진 상위 10개의 행을 반환합니다. 이는 구매한 상품에 가장 많은 돈을 지출한 고객을 나타냅니다. 이 코드와 이전 코드의 유일한 차이점은 사용 된 순위 메소드입니다. 여기서는 'first' 메서드를 사용하여 'amount' 컬럼의 동일한 값에 동일한 순위를 할당하고 있습니다. 반면 'min' 메서드 'amount' 컬럼의 동일한 값에 가장 낮은 순위를 할당하고 있습니다.
Comment