首页 > 解决方案 > 如何在熊猫中分组和过滤

问题描述

我在熊猫中有以下数据框

   from_exp     to_exp     salary
   5            7          10to12
   5            7          15to20
   0            3          1to3
   2            5          4to6
   5            9          7to8
   5            10         10to12

我想看看from_exp5 年的不同工资范围是什么。

所需的数据框

   from_exp       salary_range      count
   5              10to12            2       
   5              15to20            1
   5              7to8              1

我正在关注熊猫,但它不起作用。

df.groupby(['from_exp','salary_range']).filter(
           lambda x : x['from_exp'] == '5'
           )['salary'].size()

标签: pythonpandas

解决方案


您需要先过滤,然后分组。您可以使用query在一行中完成所有操作:

(df.query('from_exp == 5')
   .groupby(['from_exp', 'salary'], as_index=False)
   .count())

   from_exp  salary  to_exp
0         5  10to12       2
1         5  15to20       1
2         5    7to8       1

由于预过滤步骤,在这里对“from_exp”进行分组是不必要的,但我在这里完成了它以重现您的预期输出。

如果您不特别将“from_exp”作为第一列,请value_counts改用:

(df.query('from_exp == 5')['salary']
   .value_counts()
   .reset_index()
   .set_axis(['salary_range', 'count'], axis=1, inplace=False))

  salary_range  count
0       10to12      2
1       15to20      1
2         7to8      1

推荐阅读