Используя pandas groupby и numpy, где вместе в Python - PullRequest
1 голос
/ 11 февраля 2020

Я новичок ie до python!

Мне нужно использовать функцию pd.groupby () в np.where ().

Ниже приведен снимок экрана мой набор данных:

enter image description here

Ниже приведен мой код:

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)

В основном мне нужно рассчитать соотношение мужчин и женщин на одну профессию.

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 11 февраля 2020

Используйте 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

Если требуется новый 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...