如何根据每个组的不同条件对数据帧进行分组和过滤

时间:2017-07-05 13:41:54

标签: python pandas dataframe

我有以下数据框:

user_id var  gp         95_q
147     1   -75.19  529.3280
20395   2   -109.11 609.0675
32035   2   36.00   609.0675
33725   2   120.98  609.0675
47808   1   -17.89  529.3280
48633   1   -19.49  529.3280
110330  1   800     529.3280
117277  2   271.80  609.0675
1122081 2   7123.78 609.0675
129120  2   21.00   609.0675
131222  2   -4.95   609.0675
131480  1   18.58   529.3280

我需要创建一个新的数据框,其中对于每个组(var = 1和var = 2)行,其中gp超过95_q被过滤,因为你可以看到95_q对于每个组是不同的。

我采取了以下方法:

df.groupby('var').filter(lambda x: (x['gross_profit'] > x['95_q']))

但它返回以下错误:

filter function returned a Series, but expected a scalar bool

当我将代码转换为:

df.groupby('var').filter(lambda x: (x['gross_profit'] > x['95_q']).any())

我仍然得到一个仍然具有超过95_q

的值的数据帧

1 个答案:

答案 0 :(得分:0)

正如@Scott Boston提到的布尔索引就足够了:

  df[df['gp'] < df['95_q']]