Найти репрезентативное наблюдение по среднему значению для каждого класса в pandas

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть набор данных с мультиклассом, и я хочу получить репрезентативную строку для каждого класса. Например,

 import pandas as pd
df = pd.DataFrame({'A':[1,2,3,4,5,1,2,3,4,5],
              'B':['Apple','Orange','Apple','Banana','Kiwi','Apple','Orange','Apple','Banana','Kiwi'],
              'C':['Boy','Boy','Boy','Girl','Girl','Boy','Boy','Boy','Girl','Girl'],
              'D':[1000,2000,1000,3000,3000,1000,2000,1000,3000,3000],
              'Target':['X','X','Y','Z','X','X','X','Y','Z','X']
              })
  

введите описание изображения здесь

Что мне нужно, так это найти строку агента с помощью целевой функции.

Я использовал этот способ, но это не то, что я хочу.

 df.groupby('Target').mean()
  

Должен ли я преобразовать категориальные столбцы в числовые, а затем получить среднее значение? Что меня беспокоит, так это то, что после получения среднего значения я могу быть уверен, к какой категориальной переменной она должна принадлежать? Скажем, я получаю значение с плавающей запятой для B столбца, к какому фрукту оно должно принадлежать? Должен ли я просто округлить? В и хотите иметь

 from sklearn import preprocessing
le = preprocessing.LabelEncoder()
df['B'] = le.fit_transform(df['B'])
df['C'] = le.fit_transform(df['C'])
  

Результат для df.groupby('Target').mean()

введите описание изображения здесь

Но как я могу получить репрезентативное наблюдение, как в dataframe?

Комментарии:

1. Если вы хотите округлять или нет и / или как предварительно обрабатывать категориальные переменные, это сильно зависит от формулировки вашей проблемы. Просто подумайте об этом, может ли вообще быть среднее значение банана и апельсина . Имеет ли это смысл?

2. На самом деле это не имеет большого значения. Все, что я хочу, это своего рода выборка из каждого класса

3. Да, но каково будет значение Kiwi Apple Orange = 3 1 2 = 6 (при условии, что киви = 3, яблоко = 1, апельсин = 2) со средним значением группы 6/3=2==Orange ? Если вы хотите сравнить цены, например, вам нужно убедиться, что cat. кодирование — это масштабирование с ценой, или более явно: замена строки — это цена.

4. Я намерен получить 3 наблюдения для каждого (X, Y, Z) класса. Для меня это всего лишь примерный пример. Мой фактический набор данных не имеет такого же сценария. Это имеет смысл в этом наборе данных.

5. Да, тогда округление после кодирования может быть решением. Но, не зная точного варианта использования, еще сложнее определить, подходит ли округление в рамках вашей формулировки проблемы.