#pandas #pandas-groupby #pivot-table #unique #counting
#панды #панды-групповые #сводный стол #уникальный #подсчет
Вопрос:
У меня есть набор данных, в котором несколько раз участвовали люди. Я хотел бы подсчитать уникальное количество людей по полу. Я сделал это с помощью метода сводной таблицы и groupby и получил различные значения. Я не могу понять, почему. Можете ли вы сказать мне очевидный элемент, который я упустил из виду?
Как вы можете видеть, оба дают правильные значения для конкретного «пола». Скорее, это разные итоговые показатели. Groupby, по-видимому, предоставляет правильные итоговые значения, в то время как итоговые значения сводной таблицы кажутся отключенными. Почему?
Комментарии:
1. Примечание: в наборе данных нет NAN.
Ответ №1:
Это может быть вашей проблемой. Если есть имена, которые являются общими для разных полов, то pivot_table
дубликаты не учитываются. groupby подсчитывает дубликаты, как показано в этом небольшом примере, где имя » A «является как «M», так и » F » полами
import pandas as pd import sidetable df = pd.DataFrame({ 'Gender':['M','F','M','M','F','T','F','F'], 'Name': ['A','A','C','D','E','F','G','H'], }) piv_df = df.pivot_table(index='Gender',values='Name',aggfunc=pd.Series.nunique,margins=True) gb_df = df.groupby('Gender').agg({'Name':'nunique'}).stb.subtotal() print(piv_df) print(gb_df)
Выход
Name Gender F 4 M 3 T 1 All 7 Name Gender F 4 M 3 T 1 grand_total 8
Вы можете проверить это, df = df.drop_duplicates('Name')
прежде чем piv и гб, и подсчеты должны совпадать, если это единственная причина различий
Комментарии:
1. Спасибо! Вот и все. Здорово знать, что сводная таблица работает таким образом (на самом деле, как бы этого хотелось). Конечно, мои проблемы только усложнились, когда около 3000 человек сообщили об этом в одну сторону, а теперь в другую. C’est la vie.