データベースから抽出したデータではなく、そこからある列を軸にデータをサマリたものを分析のローデータとして使いたい場合、私はpivot_table機能を使ったうえで、csvに出力と再読み込みをしている。
#データの例
下記のようなデータセットを想定する。
受注番号 | 商品番号 | 受注数 |
---|---|---|
1111 | A01 | 2 |
1111 | A02 | 3 |
1111 | A03 | 1 |
2222 | A01 | 1 |
2222 | A02 | 4 |
上記のデータを、受注番号が1列目、商品番号を列名に持つテーブルに整形したい。
整形した後のテーブル
A01 A02 A03
1111 2 3 1
2222 1 4 0
#プログラミング
下記が筆者のプログラミング。改善点をぜひ指摘してください……。
qiita.rb
import pandas as pd
from pandas import Series, DataFrame
raw_data = pd.read_csv('url.csv')
#ピボットテーブル形式でまとめる
df = raw_data.pivot_table(values = ['受注数'], index = '受注番号', columns = '商品番号',aggfunc = 'sum')
#NaNを0に置き換える
df = df.fillna(0)
#csvに出力
df.to_csv('url_2')
#出力したcsvを読込
df2 = pd.DataFrame(pd.read_csv('url_2'))
##列名を整える(最初の列名は受注番号、それ以降はカテゴリ名が来るようにする)
#カテゴリ名を取得
titles = list(df2.iloc[0,1:])
#最初の列名を”受注番号”にする
titles.insert(0,'受注番号')
#列名を変更
df2.columns = titles
##最初の2行を削除(不要なので)
df2 = df2.drop(df2.index[[0,1]])
pivot_tableを使ってcsvへ出力→再入力という手間をかけなくても、groupbyとかでスマートにできないか、と思うのだけれど、イマイチ妙案が浮かばない…。