#python #pandas #pandas-groupby
#python #pandas #pandas-groupby
Вопрос:
У меня есть большой набор данных, который содержит, среди прочего, двоичную переменную:
Transactions['has_acc_id_and_cus_id'].value_counts()
1 1295130
0 823869
Name: has_acc_id_and_cus_id, dtype: int64
Когда я группирую этот набор данных — Транзакции — используя эту конкретную двоичную переменную в качестве одной групповой переменной, я получаю сгруппированный набор данных — df100 — который имеет только один уровень вышеупомянутой двоичной переменной.
df100 = Transactions.groupby(['acc_reg_year', 'acc_reg_month', 'year', 'month',
'has_acc_id_and_cus_id'])[['net_revenue']].agg(['sum', 'mean', 'count'])
df100['has_acc_id_and_cus_id'].value_counts()
1 1421
Name: has_acc_id_and_cus_id, dtype: int64
Комментарии:
1.
has_acc_id_and_cus_id
не должно быть столбца вgroupby
, это индекс. Я удивлен, что эта строка не выдаетAttributeError
2. Вам не нужно
, продолжение строки неявно заключено в квадратные скобки.
3. @Josh Да, вы правы. Я сбросил индекс, но из соображений краткости не включил команду. Извините, если это все-таки была плохая практика.
4. Полезно точно показать, какой код вы использовали, и точный результат, иначе люди будут введены в заблуждение таким образом.
Ответ №1:
Если вы действительно хотите просто groupby
включить has_acc_id_and_cus_id
, то нужной вам командой будет…
df100 = Transactions[['has_acc_id_and_cus_id', 'net_revenue']].groupby(['has_acc_id_and_cus_id']).agg(['sum', 'mean', 'count'])
Это подмножество только переменной, которую вы хотите суммировать с помощью ( has_acc_id_and_cus_id
) и переменной, которую вы хотите суммировать ( net_revenue
)…
Transactions[['has_acc_id_and_cus_id', 'net_revenue']]
…затем вы группируете их по has_acc_id_and_cus_id
…
Transactions[['has_acc_id_and_cus_id', 'net_revenue']].groupby('has_acc_id_and_cus_id')
…перед тем, как затем применить agg()
функцию для получения желаемой статистики.
Ошибка, которую вы допустили, основываясь на заявленной вами цели суммирования по has_acc_id_and_cus_id
одному, заключалась в наличии четырех других переменных, по которым вы группировали ( acc_reg_year
, acc_reg_month
, year
и month
).
Если вы действительно хотите получить сводку по has_acc_id_and_cus_id
внутри всех остальных, тогда ваш исходный код был правильным, но, возможно, в одном или нескольких из acc_reg_year
, acc_reg_month
, year
и month
когда has_acc_id_and_cus_id == 0
отсутствуют значения, поэтому проверьте свои данные…
Transactions[Transactions[`has_acc_id_and_cus_id`] == 0][[`acc_reg_year`, `acc_reg_month`, `year`, `month`]].head(100)