我在熊猫中有以下数据框
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
答案 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