パンダのグループに単純な関数を適用しようとしています。グループ化できるこのデータフレームがありますtype
:
df = pandas.DataFrame({"id": ["a", "b", "c", "d"], "v": [1,2,3,4], "type": ["X", "Y", "Y", "Y"]}).set_index("id")
df.groupby("type").mean() # gets the mean per type
np.log2
各グループの平均を取る前に、グループのみに関数を適用したいと思います。apply
要素ごとであり、 (実際のシナリオではtype
他の列と同様に)数値ではないため、これは機能しません。df
# fails
df.apply(np.log2).groupby("type").mean()
np.log2
平均を取る前にグループにのみ適用する方法はありますか? 答えになると思いましたが、問題は元の列transform
を持たないデータフレームを返すことです:type
df.groupby("type").transform(np.log2)
v
id
a 0.000000
b 1.000000
c 1.584963
d 2.000000
グループ化してから適用するなどのバリアントは機能しません: df.groupby("type").apply(np.log2)
. これを行う正しい方法は何ですか?