Pythonの列のラベルに基づいて平均と中央値を計算する方法

Aug 21 2020

次のような大きなデータフレームがあります。

price   type      status
2       shoes      none
3       clothes    none
6       clothes    none
3       shoes      none
4       shoes      none
6       shoes      none
2       clothes    none
3       shoes      none
6       clothes    none
8       clothes    done

基本的には、「ステータス」が書かれているときはいつでも「タイプ」に基づいて平均と中央値を計算したいと思います。これまでのところ、最初に「完了」ステータスに基づいてグループを作成し、次に以下のスクリプトのようにグループの平均と中央値を計算します。

g = df['status'].eq('done').iloc[::-1].cumsum().iloc[::-1]
grouper = df.groupby(g)
df_statistics = grouper.agg(
               mean = ('price', 'mean')
              ,median = ('price', 'median')
)
df_freq = df.groupby(g).apply(lambda x: x['price'].value_counts().idxmax())

「タイプ」にもう1つのパラメーターを追加して、スクリプトが「タイプ」にも基づいて各グループの中央値を推定するようにするにはどうすればよいですか。

ありがとうございました

回答

1 jezrael Aug 21 2020 at 17:06

リストしてからgroupby:に列名を渡す必要があると思います。

grouper = df.groupby([g, 'type'])