[python] pandasで複数列の組み合わせの出現頻度を調べる方法.

pandasで複数の列にまたがった値の組み合わせの出現頻度を調べる方法を紹介.

20220328追記.
pandasのversion 1.1.0からdataframeに対するvalue_countsが実装された.そのため,nativeなmethodを使う方が良いだろう.
pandas.DataFrame.value_counts

以下,以前の内容.

1つの列ならば,pd.Seriesの1つのメソッドであるvalue_countsを用いれば,すぐに調べられる.

df["column"].value_counts() 

それでは,複数列でまたがったときはどうすれば,良いのか.
ここでは,複数列を文字列にし,1つのカラムにリストとしてまとめた後に,str.joinメソッドを用いて,1つのカラムに複数列をまとめる.そして,value_countsメソッドを用いればよい. 

df = pd.DataFrame({"A":[1,2,3,1,2,3], 
                   "B": ["B1","B2", "B2","B1","B2","B2"], 
                   "C":["C1", "C1", "C1", "C1", "C1", "C2"]})
cols = ["A", "B", "C"]
ser = df[cols].astype(str)\
            .apply(lambda lis: [ x for x in lis], axis=1)\
            .str.join(" | ")\
            .value_counts()
print(ser)

これで,求めることが出来た.
for を用いてないので,処理速度もそこそこ速い.

———-雑感(`・ω・´)———-
欠損値処理用のライブラリーが何か合った気がするので,見つけたら追記します.

pandasの本に関しては以下がおすすめです.図も分かりやすい.

コメント

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