我是python的新手!
我需要在np.where()下使用pd.groupby()函数。
以下是我的数据集的屏幕截图:
以下是我的代码:
df = pd.read_csv("/Users/gautam/Desktop/data.csv")
df.head()
grouped = df.groupby('Occupation')['Emp_Code'].count() #Calculating Count of Employees by Occupation
np.where(df['Gender']=='M', df.groupby('Occupation')['Emp_Code'].count()/grouped*100,0)
基本上,我需要计算每个职业的男性比例。
任何帮助将不胜感激。
GroupBy.transform
与布尔掩码的平均值一起使用,因此获得Series
与原始掩码相同的大小,因此可以传递给np.where
新列:
df = pd.DataFrame({
'Occupation':list('dddeee'),
'Emp_Code':list('aabbcc'),
'Gender':list('MFMFMF')
})
print (df)
Occupation Emp_Code Gender
0 d a M
1 d a F
2 d b M
3 e b F
4 e c M
5 e c F
m = df['Gender'].eq('M')
df['new'] = np.where(m, m.groupby(df['Occupation']).transform('mean').mul(100), 0)
print (df)
Occupation Emp_Code Gender new
0 d a M 66.666667
1 d a F 0.000000
2 d b M 66.666667
3 e b F 0.000000
4 e c M 33.333333
5 e c F 0.000000
如果要用normlize值填充新的DataFrame,则可以使用crosstab
和normalize
参数一个可能的解决方案:
df2 = pd.crosstab(df['Occupation'], df['Gender'],normalize='index')
print (df2)
Gender F M
Occupation
d 0.333333 0.666667
e 0.666667 0.333333
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句