Использование groupby и условия

Рейтинг: 0Ответов: 1Опубликовано: 15.03.2023

Необходимо посчитать дисперсию (столбец amount) по категориям получившегося столбца mcc_code+tr_type, в которых количество наблюдений >= 10. Таблица (df_trans_copy) состоит из следующих столбцов: mcc_code+tr_type, customer_id, tr_datetime, mcc_code, tr_type, amount, term_id, gender, tr_description, mcc_description.

Информация о типе данных:

 #    Column           Dtype  
---  ------           -----  
 0   customer_id      int64  
 1   tr_datetime      object 
 2   mcc_code         int64  
 3   tr_type          int64  
 4   amount           float64
 5   term_id          object 
 6   gender           float64
 7   tr_description   object 
 8   mcc_description  object
 9   mcc_code+tr_type object

Что пробовал:

  1. Получил условие, которое выбирает наблюдения >=10
cond_1 = (df_trans_copy.groupby('mcc_code+tr_type')['mcc_code+tr_type'].count() >= 10)
  1. Улучшил его, получив по сути список всех ['mcc_code+tr_type'], которые мне подходят:
cond_2 = cond_1[lambda x: x == True]

Как применить полученное условие (cond_1 или cond_2)? Пробовал по-разному, не получается, выдает различные ошибки. Например:

grouped = df_trans_copy.groupby('mcc_code+tr_type')

grouped[cond_1]

Ошибка: 'Columns not found: False, True'

или

grouped[df_trans_copy.index in cond_2.index]

Ошибка: unhashable type: 'Int64Index'

или

grouped[df_trans_copy['mcc_code+tr_type'] in cond_2]

Ошибка: unhashable type: 'Series'

Дисперсию же планировал посчитать следующим шагом.

Ответы

▲ 0

Проще показать на примере, как это можно сделать:

import pandas as pd

df = pd.DataFrame({'data': [1, 2, 3, 4, 1, 2, 3, 2, 3]})
group_size = df.groupby('data').size()
values = group_size[group_size > 2].index.values
print(df[df.data.isin(values)])

Вывод:

   data
1     2
2     3
5     2
6     3
7     2
8     3