groupbyした後の値で操作したいのですが、うまいやり方が分からず困っています
例えば、あるカラムでgroupbyしてsizeやcountが一定未満である値を持つrowを元のDataFrameから削除する、という場合です
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
例えば groupby の countの結果を使用して、その後の処理を行いたい場合、
一度transform()
にて結果(count値)を元の DataFrame に展開ことで
その後の操作を簡単に行うことができるかと思います
以下にサンプルを書きましたので参考にしてください
Python
1import pandas as pd 2import numpy as np 3 4# 適当なDataFrameを作成 5N=10 6df = pd.DataFrame({ 7 'Class':np.random.choice(['A','B','C'],N), 8 'Score':np.random.randint(0,100,N)}) 9 10# グループのサイズを'cls_count' Columnに追加 11df['cls_count'] = df.groupby('Class')['Score'].transform('count') 12print(df) 13 14# グループのサイズが2以上の場合のみ表示 15ret = df.loc[df['cls_count'] >= 2, :] 16print(ret)
投稿2018/02/24 07:47
総合スコア15898
0
条件を満たすグループを集めてconcatでDataFrameにまとめ直す方法です。
途中の条件式のmean()
をsum()
やcount
に変えて試して見てください。
import pandas as pd df = pd.DataFrame({ 'Name':['A','B','C','D','E','F', 'g'], 'Class':[1,2,1,2,1,2, 3], 'Score':[100,95,90,85,80,75,90]}) results = [] for c, g in df.groupby("Class"): if g["Score"].mean() >= 90: results.append(g) df = pd.concat(results) print(df) # Class Name Score # 0 1 A 100 # 2 1 C 90 # 4 1 E 80 # 6 3 g 90
投稿2018/02/24 07:34
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
分かりにくい質問に丁寧な回答ありがとうございます
すぐに試してみます
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/02/24 07:50
退会済みユーザー
2018/02/24 09:11