ランダムの森

20代エンジニアです。プログラミングについて主に書いてます。

pandasのDataFrameでgroupbyを使って項目ごとの合計値を比較する方法。

購買の記録などを分析するときに購買されたモノ別のデータを比較したい時があると思います。
今回は、モノ別の売り上げ個数合計値を比較します。

まずはデータフレームを作成。 今回はフルーツの名前と、それぞれの売れた個数を表示させてます。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.array([['apple','orange','grape','apple','peach','apple','peach','orange','grape','apple'], 
                                                       [11,23,12,13,47,23,53,36,70,93]]).T,columns = ['fruits','numbers'])

数字のカラムが文字列として認識されてしまうので、整数型に変換。

df['numbers'] = df['numbers'].astype(np.int64)

これでデータフレームはこんな感じです。

df

>output
f:id:doreikaiho:20181202215926p:plain

次にgroupbyを使ってfruits名によるグループ分けを行い、それぞれのグループで個数合計の計算を行います。
sum()で合計計算、sort_values(by='numbers', ascending=False)では個数合計が大きいフルーツから順に表示させています。
ascendingは昇順という意味の英単語。
最後にindexをリセットします。

df = df[['fruits', 'numbers']].groupby(['fruits'], as_index=False).sum().sort_values(by='numbers', ascending=False).reset_index()
df

>output
f:id:doreikaiho:20181202220026p:plain

リセットの際にindexという余計なカラムができたので消しておきます。
これで、フルーツごとの合計個数が計算できました。

df = df.drop('index', axis =1)
df

>output
f:id:doreikaiho:20181202220103p:plain

#python #dataframe #pandas #groupby