pandasで重複数をカウントしたい時、
例えばこんなデータがあったとする。
import pandas as pd df = pd.DataFrame([['AA',100],['AA',200],['AA',200], ['BB',100],['BB',200]],columns=['x','y']) #--------------- # x y # 0 AA 100 # 1 AA 200 # 2 AA 200 # 3 BB 100 # 4 BB 200 #-----------------
xの列はAAが3つBBが2つある。
これを
a = {"AA":3, "BB":2}
のように表現したい。
for文を使ってなんとかする方法は一つある。
a = dict() for index, row in df.iterrows(): if a.has_key(row["x"]): a[row["x"]] += 1 else: a[row["x"]] = 1 #In : a #Out: {'AA': 3, 'BB': 2}
しかしこれでは、行数が大きくなってくると時間がかかってしまう。
実はpandasではこれを高速で行う方法がある。
applyという関数を使う方法だ。
a = dict() def b(i): if a.has_key(i): a[i] += 1 else: a[i] = 1 df["x"].apply(lambda x:b(x)) #In : a #Out: {'AA': 3, 'BB': 2}
これで高速に重複カウントができる。
参考サイト:
DataFrame や Series の重複データをチェック・削除-python | コード7区
Python pandas データのイテレーションと関数適用、pipe - StatsFragments