太郎くんがバイト先のレストランで6人の客がいるテーブルで注文を受けたところ、コーヒー’, ‘紅茶’,’コーヒー’, ‘オレンジジュース’, ‘紅茶’,’コーヒー’でした。花子さんは、何がいくつあったかをpythonでわかりやすく集計したいと思いました。どんなコードを書けばよいでしょうか?
from collections import Counter
import pandas as pd
from pandas import DataFrame
飲み物注文リスト=['コーヒー', '紅茶','コーヒー', 'オレンジジュース', '紅茶','コーヒー']
個別アイテム数 = Counter(飲み物注文リスト)
df = pd.DataFrame.from_dict(個別アイテム数, orient='index').reset_index()
df = df .rename(columns={'index':'飲み物', 0:'数'})
df
上のようなコードを実行したところ、
飲み物 | 数 | |
---|---|---|
0 | コーヒー | 3 |
1 | 紅茶 | 2 |
2 | オレンジジュース | 1 |
という結果が得られました。花子さんは、飲み物だけでなくメインディッシュの注文に関する情報も持っていました。メインディッシュに関しても、同様に集計するコードはどう書けるでしょうか。ただし、オーダーはpythonの辞書(dictionary)の形式で書かれているものとします。
オーダー={‘飲み物’:[‘コーヒー’, ‘紅茶’,’コーヒー’, ‘オレンジジュース’, ‘紅茶’,’コーヒー’],
‘メイン’:[‘ピザ’,’ピザ’,’ピザ’,’ピザ’,’パスタ’,’グラタン’]}
個別アイテム数 = Counter(オーダー['メイン'])
df = pd.DataFrame.from_dict(個別アイテム数, orient='index').reset_index()
df = df .rename(columns={'index':'食べ物', 0:'数'})
df
上のコードを実行してみると、
食べ物 | 数 | |
---|---|---|
0 | ピザ | 4 |
1 | パスタ | 1 |
2 | グラタン | 1 |
と集計できました。めでたし、めでたし。
参考
- Transform a Counter object into a Pandas DataFrame (StackOverFlow)