Вот один из способов использования pandas.pivot_table
и векторизованных вычислений Панд. Обратите внимание, что этот метод избавляет от необходимости выполнять отдельный groupby
.
df = pd.DataFrame([['A', 'F'], ['A', 'F'], ['A', 'M'], ['B', 'M'], ['B', 'M'], ['B', 'F'],
['C', 'M'], ['C', 'M'], ['D', 'F']], columns=['Occupation', 'Gender'])
# pivot input dataframe
res = df.pivot_table(index='Occupation', columns='Gender', aggfunc='size', fill_value=0)
# calculate ratios
sums = res[['F', 'M']].sum(axis=1)
res['FemaleRatio'] = res['F'] / sums
res['MaleRatio'] = res['M'] / sums
print(res)
Gender F M FemaleRatio MaleRatio
Occupation
A 2 1 0.666667 0.333333
B 1 2 0.333333 0.666667
C 0 2 0.000000 1.000000
D 1 0 1.000000 0.000000