如何对熊猫进行分组和过滤

时间:2019-05-25 03:25:30

标签: python pandas

我在熊猫中有以下数据框

http://<SSRS_Server>/reports/api/v2.0/Datasets(f973d010-2052-49ad-ac69-ae66d0324e03)/Model.GetData

我想看看section Asia.PQ.SSRS_Connector; [DataSource.Kind="Asia.PQ.SSRS_Connector", Publish="Asia.PQ.SSRS_Connector.Publish"] shared Asia.PQ.SSRS_Connector.Feed = Value.ReplaceType(SSRSConImpl, type function (url as Uri.Type) as any); DefaultRequestHeaders = [ #"Accept" = "application/json;odata.metadata=minimal", #"OData-MaxVersion" = "4.0" ]; SSRSConImpl = (url as text) => let body= "", source = Web.Contents(url, [ Headers = DefaultRequestHeaders, Content=Text.ToBinary(body)]), json = Json.Document(source) in json; 的不同工资范围是5年。

所需数据框

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

我正在熊猫追随,但没有用。

from_exp

3 个答案:

答案 0 :(得分:2)

您需要先过滤,然后再分组。您可以使用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

答案 1 :(得分:1)

我使用这种方式将列命名为count

df.groupby(['from_exp','salary']).to_exp.count().loc[(5), :].reset_index(name='count')


Out[445]:
   from_exp  salary  count
0         5  10to12      2
1         5  15to20      1
2         5    7to8      1

答案 2 :(得分:0)

您可以执行以下操作以获取所需的输出:

df = df[df.from_exp == 5].groupby(['from_exp','salary']).agg({'salary':'count'}).rename(columns={'salary':'count'})
df = df.reset_index().rename(columns={'salary':'salary_range'})

print(df)

输出为:

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