1. ホーム
  2. python

[解決済み] pandasのgroupbyに関数を適用する

2022-03-02 23:09:57

質問

というカラムを持つpandasのデータフレームがあります。 my_labels という文字列が含まれています。 'A', 'B', 'C', 'D', 'E' . これらの文字列のそれぞれの出現回数をカウントし、そのカウント数をすべてのカウントの合計で割りたいと思います。これをPandasでやろうとすると、以下のようになります。

func = lambda x: x.size() / x.sum()
data = frame.groupby('my_labels').apply(func)

このコードでは、「DataFrameオブジェクトに'size'という属性がありません」というエラーが発生します。Pandasでこれを計算する関数を適用するにはどうしたらよいでしょうか?

どのように解決するのですか?

apply に適用する関数を受け取ります。 の値であり、シリーズではなく、kwargs を受け入れる。 そのため、値には .size() メソッドを使用します。

おそらく、これならうまくいくでしょう。

from pandas import *

d = {"my_label": Series(['A','B','A','C','D','D','E'])}
df = DataFrame(d)


def as_perc(value, total):
    return value/float(total)

def get_count(values):
    return len(values)

grouped_count = df.groupby("my_label").my_label.agg(get_count)
data = grouped_count.apply(as_perc, total=df.my_label.count())

.agg() メソッドに適用される関数を受け取ります。 すべて の値は groupbyオブジェクト .