10

パンダのグループに単純な関数を適用しようとしています。グループ化できるこのデータフレームがあります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). これを行う正しい方法は何ですか?

4

1 に答える 1