pandasによるデータ集計

# 前回のプログラムの読込
%run 1.ipynb
df.hea
stationery_counts = df['Name'].value_counts()

stationery_counts

df['Name'].value_counts() で Name 列の各値ごとの個数を集計

ノート        5
ボールペン      4
ホッチキス      3
のり         2
セロハンテープ    1
Name: Name, dtype: int64

もしpandasを用いないで集計すると

# pandasを利用しないで集計
count_dict = {}
with open('dataset/stationery.csv') as f:
    for idx, row in enumerate(f):
        if idx == 0:
            continue
        colmuns = row.rstrip().split(',')
        name = colmuns[0]
        if name in count_dict:
            count_dict[name] += 1
        else:
            count_dict[name] = 1

for key, value in count_dict.items():
    print(key, value)

pandasを用いないと非常に長くなる

グループ集計

# 前回のプログラムの読込
%run 2.ipynb
df.head()
# 文房具の名前でグループ化した合計金額を表示
grouped_df = df.groupby(by='Name').sum() 今回は合計
total_price = grouped_df['Price']
total_price
  • df.groupby(by=列名) で列名で指定した列の値によってグループ化する
  • 合計値 sum() や平均値 mean() の計算したいものを追記する
Name
のり          220
セロハンテープ      90
ノート         750
ホッチキス      1200
ボールペン       490
Name: Price, dtype: int64

pandasを使用しなかったら

# pandasを利用しないでgoupbyと同じ処理
count_dict = {}
with open('dataset/stationery.csv') as f:
    for idx, row in enumerate(f):
        if idx == 0:
            continue
        colmuns = row.rstrip().split(',')
        name = colmuns[0]
        price = int(colmuns[1])
        if name in count_dict:
            count_dict[name] += price
        else:
            count_dict[name] = price

for key, value in count_dict.items():
    print(key, value)

コメント

タイトルとURLをコピーしました