見出し画像

[第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​

データラングリング後の出力結果

画像1

次の講座へ

この記事が気に入ったらサポートをしてみませんか?