Suppose you're given the following data:
records = [
{'group': 'A', 'name': 'Chris', 'is_male': True, 'smoker': False},
{'group': 'A', 'name': 'Bob', 'is_male': True, 'smoker': True},
{'group': 'A', 'name': 'Dana', 'is_male': False, 'smoker': False},
{'group': 'B', 'name': 'Alice', 'is_male': False, 'smoker': True},
{'group': 'B', 'name': 'Michael', 'is_male': True, 'smoker': True},
{'group': 'B', 'name': 'Ron', 'is_male': True, 'smoker': True},
{'group': 'C', 'name': 'Rihanna', 'is_male': False, 'smoker': True},
{'group': 'C', 'name': 'Madonna', 'is_male': False, 'smoker': True},
{'group': 'C', 'name': 'Cher', 'is_male': False, 'smoker': False},
{'group': 'C', 'name': 'John', 'is_male': True, 'smoker': True},
]
data = pd.DataFrame.from_dict(records)
If we do this:
data.groupby(['group', 'is_male', 'smoker']).count().reset_index()
we get:
group is_male smoker name
A False False 1
A True False 1
A True True 1
B False True 1
B True True 2
C False False 1
C False True 2
C True True 1
What I'd like to do is to get the same data, but in percentages, by the size of the group
For example, in group B we'll get 1/3 and 2/3
How can I do that?