예제 코드: https://github.com/wikibook/pyda100
transaction = pd.concat([transaction_1, transaction_2], ignore_index=True)
transaction_detail=pd.concat([transaction_detail_1,transaction_detail_2], ignore_index=True)
concat 이용
기준 데이터 결정 후 -> 어떤 칼럼을 키로 조인할지 생각(부족한 데이터 칼럼 생각 & 공통 데이터 칼럼 생각)
# 003 거래 정보
join_data = pd.merge(transaction_detail, transaction[["transaction_id", "payment_date", "customer_id"]],
on="transaction_id", how="left")
merge 이용
# 004 거래 정보 + 고객 정보 + 상품 정보
join_data = pd.merge(join_data, customer_master, on="customer_id", how="left")
join_data = pd.merge(join_data, item_master, on="item_id", how="left")
join_data.head()
매출 = quantity * item_price
join_data["price"] = join_data["quantity"] * join_data["item_price"]
join_data["price"].sum() == transaction["price"].sum()
join_data.isnull().sum()
join_data.describe()
join_data.dtypes
#datatime형 변환
join_data["payment_date"] = pd.to_datetime(join_data["payment_date"])
#새로운 칼럼 payment_month 연월 단위로 작성 / dt 사용
join_data["payment_month"] = join_data["payment_date"].dt.strftime("%Y%m")
groupby로 집계: 덜 직관적
pivot_table로 집계
pd.pivot_table(join_data, index='item_name', columns='payment_month', values=['price', 'quantity'], aggfunc='sum')
행: 상품명
열: 연월
value: 집계하고 싶은 칼럼(price, quantity)
aggfunc: 집계 방식(sum)
# 대문자 변환
uriage_data["item_name"] = uriage_data["item_name"].str.upper()
# 공백 제거
uriage_data["item_name"] = uriage_data["item_name"].str.replace(" ", "")
uriage_data["item_name"] = uriage_data["item_name"].str.replace(" ", "")
# item_name 순으로 정렬
uriage_data.sort_values(by=["item_name"], ascending=True)
flg_is_null = uriage_data["item_price"].isnull()
# 결측치가 존재하는 상품명 추출해서 중복 제거
for trg in list(uriage_data.loc[flg_is_null, "item_name"].unique()):
# 결측치 상품과 같은 상품의 데이터 금액을 결측치에 대입
price = uriage_data.loc[(~flg_is_null) & (uriage_data["item_name"] == trg), "item_price"].max()
uriage_data["item_price"].loc[(flg_is_null) & (uriage_data["item_name"]==trg)] = price
uriage_data.head()
flg_is_serial = kokyaku_data["등록일"].astype("str").str.isdigit()
fromSerial = pd.to_timedelta(kokyaku_data.loc[flg_is_serial, "등록일"].astype("float"), unit="D") + pd.to_datetime("1900/01/01")
fromString = pd.to_datetime(kokyaku_data.loc[~flg_is_serial, "등록일"])
kokyaku_data["등록일"] = pd.concat([fromSerial, fromString])
kokyaku_data["등록연월"] = kokyaku_data["등록일"].dt.strftime("%Y%m")
rslt = kokyaku_data.groupby("등록연월").count()["고객이름"]
join_data = pd.merge(uriage_data, kokyaku_data, left_on="customer_name", right_on="고객이름", how="left")
join_data = join_data.drop("customer_name", axis=1)
join_data
dump_data = join_data[["purchase_date", "purchase_month", "item_name", "item_price", "고객이름", "지역", "등록일"]]
dump_data.to_csv("dump_data.csv", index=False)