カテゴリのリストを含む列がDataFrameにあります。例えば:
0 [Pizza]
1 [Mexican, Bars, Nightlife]
2 [American, New, Barbeque]
3 [Thai]
4 [Desserts, Asian, Fusion, Mexican, Hawaiian, F...
6 [Thai, Barbeque]
7 [Asian, Fusion, Korean, Mexican]
8 [Barbeque, Bars, Pubs, American, Traditional, ...
9 [Diners, Burgers, Breakfast, Brunch]
11 [Pakistani, Halal, Indian]
私は2つのことを試みています:
1)一意のカテゴリを取得する-私のアプローチは空のセットを持ち、シリーズを繰り返し、各リストを追加します。
私のコード:
unique_categories = {'Pizza'}
for lst in restaurant_review_df['categories_arr']:
unique_categories = unique_categories | set(lst)
これにより、列のすべてのリストに含まれる一連の一意のカテゴリが得られます。
2)カテゴリ数の円グラフを生成し、各レストランは複数のカテゴリに属することができます。たとえば、レストラン11はパキスタン、インド、ハラールのカテゴリに属しています。私のアプローチは、カテゴリを繰り返し、カウントを取得するためにシリーズをもう一度繰り返します。
これを行うためのより単純またはエレガントな方法はありますか?
前もって感謝します。
explode
を使用して更新df['category'].explode().value_counts()
出力:
Barbeque 3
Mexican 3
Fusion 2
Thai 2
American 2
Bars 2
Asian 2
Hawaiian 1
New 1
Brunch 1
Pizza 1
Traditional 1
Pubs 1
Korean 1
Pakistani 1
Burgers 1
Diners 1
Indian 1
Desserts 1
Halal 1
Nightlife 1
Breakfast 1
Name: Places, dtype: int64
そしてプロットで:
df['category'].explode().value_counts().plot.pie(figsize=(8,8))
出力:
pandas 0.25.0以前のバージョンの場合:
df['category'].apply(pd.Series).stack().value_counts()
出力:
Mexican 3
Barbeque 3
Thai 2
Fusion 2
American 2
Bars 2
Asian 2
Pubs 1
Burgers 1
Traditional 1
Brunch 1
Indian 1
Korean 1
Halal 1
Pakistani 1
Hawaiian 1
Diners 1
Pizza 1
Nightlife 1
New 1
Desserts 1
Breakfast 1
dtype: int64
プロットあり:
df['category'].apply(pd.Series).stack().value_counts().plot.pie()
@coldspeedのコメントごと
from itertools import chain
from collections import Counter
pd.DataFrame.from_dict(Counter(chain(*df['category'])), orient='index').sort_values(0, ascending=False)
出力:
Barbeque 3
Mexican 3
Bars 2
American 2
Thai 2
Asian 2
Fusion 2
Pizza 1
Diners 1
Halal 1
Pakistani 1
Brunch 1
Breakfast 1
Burgers 1
Hawaiian 1
Traditional 1
Pubs 1
Korean 1
Desserts 1
New 1
Nightlife 1
Indian 1