Как найти список всех занятий с мужским и женским доминированием, используя Pandas - PullRequest
0 голосов
/ 05 мая 2020

Я должен указать общее количество мужчин и женщин по профессии и проверить, преобладают ли в этой профессии мужчины или женщины.

Вот фрейм данных:

user_id age sex occupation  zip_code
0   1   24  M   technician  85711
1   2   53  F   other       94043
2   3   23  M   writer      32067
3   4   24  M   technician  43537
4   5   33  F   other       15213

Результат должен быть примерно таким:

Occupation Male Female Difference Domination (male or female dominated)
.           .    .      .           .           
.           .    .      .           .           
.           .    .      .           .           

Я пробовал это пока:

movie_df2.groupby(['sex','occupation']).count()

Но это не работает. Буду рад любой помощи.

РЕДАКТИРОВАТЬ: Далее я сделал:

df3 = movie_df2[['sex','occupation']]
df3.head()

и получил:

sex occupation
0   M   technician
1   F   other
2   M   writer
3   M   technician
4   F   other

дальше я сделал df3.groupby(['occupation','sex']).count().head()

и получил:

occupation     sex
administrator   F
                M
  artist        F
                M
   doctor       M

где мне go отсюда? теперь мне нужно подсчитать мужчин и женщин для каждого занятия.

Ответы [ 2 ]

3 голосов
/ 05 мая 2020

Можете попробовать это?

a = df.groupby(['occupation','sex']).size().reset_index(name='counts').pivot(index='occupation', columns='sex').fillna(0)
a['Diff'] = a['counts', 'M'] - a['counts', 'F']
a['Domination'] = np.where(a['Diff'] > 0, "Male","Female")
a
0 голосов
/ 05 мая 2020
def dominationF(df):
    mcount = df[df['sex'] == 'M'].shape[0]
    fcount = df[df['sex'] == 'F'].shape[0]

    if mcount > fcount:
        domination = 'male'
    else:
        domination = 'female'

    diff = mcount - fcount

    return mcount, fcount, diff, domination


finalDF = pd.DataFrame(columns = ['Occupation', 'Male', 'Female', 'Diff', 'Domination'],
                  index = range(len(df_61619957['occupation'].unique())))  

i = 0
for group, data in df.groupby(['occupation']):
    mcount1, fcount1, diff1, domination1 = dominationF(data)
    finalDF.iloc[i] = [group, mcount1, fcount1, diff1, domination1]
    i = i + 1


finalDF

Вот финальныйDF

    Occupation      Male    Female  Diff    Domination
   0    other       0       2       -2      female
   1    technician  2       0       2        male
   2    writer      1       0       1       male
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...