ФоновыйGroupBy/Сумма в Python панд - ноль на счету не показывает ... иногда
У меня есть набор данных в смоделированы популяции людей. Они имеют следующие атрибуты
- Возраст (0-120 лет)
- Пол (мужской, женский)
- расы (белый, черный, латиноамериканского, азиатского, другой)
DF. голова()
Age Race Gender in_population
0 32 0 0 1
1 53 0 0 1
2 49 0 1 1
3 12 0 0 1
4 28 0 0 1
Существует еще одна переменная, которая идентифицирует человека как «In_Population» *, который является булевой переменной. Я использую groupby in pandas для группировки населения возможных комбинаций из 3 атрибутов для вычисления таблицы подсчетов путем суммирования переменной «In_Population» в каждой возможной категории человека.
Существует 2 пола * 5 рас * 121 возраст = 1210 возможных групп, в которые попадет каждый человек в населении.
Если конкретная группа людей в конкретном году не имеет членов (например, 0-летний мужчина «другой»), то я все еще хочу, чтобы эта группа появлялась в моей группе - с помощью dataframe, но с нулем в сосчитать. Это происходит правильно в примере данных ниже (Age = 0, Gender = {0,1} и Race = 4). Там не было никаких «других» ноль-летних в данном
grouped_obj = df.groupby(['Age','Gender','Race'])
groupedAGR = grouped_obj.sum()
groupedAGR.head(10)
in_population
Age Gender Race
0 0 0 16
1 8
2 63
3 5
4 0
1 0 22
1 4
2 64
3 12
4 0
Вопрос
Это происходит только для некоторых комбинаций половозрастной-Race. Иногда группы нулевой суммы пропускаются полностью. Ниже приведены данные в возрасте 45 лет. Я ожидал увидеть 0, что указывает на то, что в этом наборе данных нет 45-летних мужских «других» рас.
>>> groupedAGR.xs(45, level = 'Age')
in_population
Gender Race
0 0 515
1 68
2 40
3 20
1 0 522
1 83
2 48
3 29
4 3
Примечание
* «In_Population» В основном отфильтровывает «новорожденный» и «иммигрант», которые не являются частью соответствующего населения при расчете «смертности»; смертность в населении происходит до того, как иммиграция и роды случаются, поэтому я исключаю их из расчетов. У меня было подозрение, что это как-то связано с этим - у нулевых летних было нулевое количество очков, но у каждой другой возрастной группы вообще ничего не было показано ... но это не так.
>>> groupedAGR.xs(88, level = 'Age')
in_population
Gender Race
0 0 52
2 1
3 0
1 0 62
1 3
2 5
3 3
4 1
В населении нет 88-летних азиатских мужчин, поэтому в категории есть нуль. В населении нет 88-летних «других» мужчин, но они вообще не появляются.
EDIT: Я добавил в код, показывающий, как я делаю группу по объекту в пандах и как я суммирую, чтобы найти количество в каждой группе.
Спасибо! Это сработало! Есть ли способ сделать выход 1D? Я бы хотел увидеть только один столбец. –
Кроме того, есть ли у вас какая-то интуиция, почему нули появлялись только иногда? А подмножества «нулевого подсчета» населения вообще не появлялись? –
И мне нравится, как вы разместили изображение через ссылку imgur. Я открыл функцию «edit», чтобы увидеть, как вы это сделали. Очень круто. –