猿问

Python:如何对两列进行分组?

我有一个数据框df,其中包含城市人口的工作和年龄信息


df

    User   City     Job             Age

0    A      x    Unemployed         33

1    B      x     Student           18

2    C      x    Unemployed         27

3    D      y  Data Scientist       28

4    E      y    Unemployed         45

5    F      y     Student           18

对于每个城市,我想计算失业率和年龄中位数。


对于失业率,我做了以下工作


## Count the people in each city

cust = insDataRed.groupby(['City'])['User'].count() ## Number of people for each city

cust = pd.DataFrame(cust)

cust.columns=['nCust']

cust['City']=cust.index

cust=cust.reset_index(drop=True)


## Count the people unemployed in each city

unempl = df[df['Job'] == 'Unemployed']

unempl = unempl.groupby(['City'])['Job'].count()

unempl = pd.DataFrame(unempl)

unempl.columns=['unempl']

unempl['City']=unempl.index

unempl=unempl.reset_index(drop=True)



# 1. Fraction of Unemployment

unRate = pd.merge(unempl, cust, on = 'City')

unRate['rate'] =(unRate['unempl']/unRate['nCust'])*100

有没有更优雅的解决方案?如何计算每个城市的年龄中值?


守候你守候我
浏览 300回答 1
1回答

撒科打诨

如果您只想按城市执行此操作:df.groupby(by='City').median()如果您想同时按城市和工作分组:df.groupby(by=['City', 'Job']).median()获取每个城市的失业率:import pandas as pddf = pd.DataFrame({    'User': ['A', 'B', 'C', 'D', 'E', 'F'], 'City': ['x', 'x', 'x', 'y', 'y', 'y'],     'Job': ['Unemployed', 'Student', 'Unemployed', 'Data Scientist', 'Unemployed', 'Student'],    'Age':[33, 18, 27, 28, 45, 18],})df['count'] = 1unmpl = df.groupby(by=['City', 'Job'])['count'].sum().reset_index()unmpl_by_city = unmpl[unmpl['Job'] == 'Unemployed'].reset_index(drop=True)count_by_city = df.groupby(by=['City'])['count'].sum().reset_index(drop=True)frac_by_city = (unmpl_by_city['count'] * 100.0 /                 count_by_city)unmpl_by_city['frac'] = frac_by_cityunmpl_by_city
随时随地看视频慕课网APP

相关分类

Python
我要回答