[第5回] データフレームの各種操作(列名変更,結合,グループ集計)
jupyter notebookとpythonを利用した分析講座となっております。
データフレームを操作
pickleファイルを読み込みデータフレームを操作してみます
コード
%%time
import pandas as pd
import numpy as np
import datetime
import pickle
#pickleファイル読込
df = pd.read_pickle('../data/pickle/202107.pickle')
#列名変更
feature = ['アカウント名','店舗名','営業日時','会計ID','卓情報','階数','来店客数','販売商品名','税率','販売数量','売上']
df.columns = feature
#列名選択
df = df[['アカウント名','営業日時','会計ID','来店客数','販売商品名','税率','販売数量','売上']]
#型変換
df['営業日時'] = pd.to_datetime(df['営業日時'], errors='coerce')
df['来店客数'] = pd.to_numeric(df['来店客数'], errors='coerce')
df['税率'] = pd.to_numeric(df['税率'], errors='coerce')
df['販売数量'] = pd.to_numeric(df['販売数量'], errors='coerce')
df['売上'] = pd.to_numeric(df['売上'], errors='coerce')
#営業日と営業時間帯列を作成
df['営業日'] = df['営業日時'].dt.date
df['営業時間帯'] = df['営業日時'].dt.hour
#データ絞込(売上>0 , 税率8%or10%)
df = df.query('売上>0')
df = df.query('税率==8 or 税率==10')
#Salesforce取引先読込
sf_acc = pd.read_csv('../data/csv/sf_account.csv', dtype=str)
sf_acc = sf_acc.rename(columns={'アカウント名': 'アカウント名'})
#結合
df_inner = pd.merge(df, sf_acc, how='inner', on='アカウント名')
#アカウント単位集計
df_acc = df_inner.query('来店客数>0')
#会計ID単位で来店客数を集計
df_acc = df_acc.groupby(['アカウント名','業種','業態','営業日','会計ID','来店客数']).agg({
'販売数量': np.sum,
'売上': np.sum}
)
#マルチインデックス解除
df_acc = df_acc.reset_index(level=['会計ID','来店客数'])
#再集計
df_acc = df_acc.groupby(['アカウント名','業種','業態','営業日']).agg({
'来店客数': np.sum,
'会計ID':pd.Series.nunique,
'販売数量': np.sum,
'売上': np.sum}
)
#平均客単価算出
df_acc['客単価'] = pd.to_numeric(
(df_acc['売上']/df_acc['来店客数']).round(),
errors='coerce'
)
#列名変更
df_acc = df_acc.rename(columns={'会計ID' : '会計数'})
#df_acc
df_acc.to_csv('../output/acc/checkout_acc_202107.csv')
df_acc