LoginSignup
2
3

More than 3 years have passed since last update.

ローデータから、特定の列に絞ってまとめたデータセットを作る

Last updated at Posted at 2019-10-08

データベースから抽出したデータではなく、そこからある列を軸にデータをサマリたものを分析のローデータとして使いたい場合、私は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とかでスマートにできないか、と思うのだけれど、イマイチ妙案が浮かばない…。

2
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3