2
私は以下のデータフレームを持っています。私が欲しいブロードキャストgroupby with pandasブール値フィルタスカラー
df = pd.DataFrame({'var1' : list('a' * 3) + list('b' * 2) + list('c' * 4)
,'var2' : [i for i in range(9)]
,'var3' : [20, 40, 100, 10, 80, 12,24, 53, 90]
})
最終的な結果は以下の通りです:
var1 var2 var3 var3_lt_50 0 a 0 20 60 1 a 1 40 60 2 a 2 100 60 3 b 3 10 10 4 b 4 80 10 5 c 5 12 36 6 c 6 24 36 7 c 7 53 36 8 c 8 90 36
私は以下のコードによると、グループ・バイとマージを通じて、二段階でこの結果が得られます。
df = df.merge(df[df.var3 < 50][['var1', 'var3']].groupby('var1', as_index = False).sum().rename(columns = {'var3' : 'var3_lt_50'})
,how = 'left'
,left_on = 'var1'
,right_on = 'var1')
"groupby" + "merge"ステップimを使わずに、このタイプのブール論理式+ interbybyスカラーのブロードキャストを行う方法を教えてもらえますか?よりスムーズなコードが必要です。入力を事前に
おかげで、
/Swepab
"とボブウル叔父" - ありがとう! – swepab
速いフォローアップの質問:私がブール式を私が合計したもの以外の変数に変更したいのであれば、コードをどのように変更するのですか?たとえば、var2> 4の場所を合計して、その例と同じようにすべてのグループバイヤにブロードキャストしたいとします。 – swepab
'groupby.apply'に' assign'を使用できます。スカラー値をブロードキャストする能力。ここでもまた、優れた、働きました(df.groupby( 'var1'、group_keys = False).apply(ラムダ:g.assign(new_var = g.var3 [g.var2> 3] .sum())) ' – Psidom