Pandas groupby std возвращает пустой фрейм данных

#python #pandas #pandas-groupby

#питон #панды #панды-групповые

Вопрос:

У меня есть фрейм данных pandas со следующими столбцами, представляющими интерес — код продукта и цена. Я хотел бы увидеть стандартное отклонение для продуктов с тем же кодом.

 df.price = pd.to_numeric(df.price, errors='raise')  len(df[df.price.isna()]) Out: 0  df.groupby(['productcode'])['price'].describe()   count unique top freq productcode   T1H5T 1 1 38 1 T1J0T 1 1 11 1 T1L6E 1 1 24 1 T1H0G9 1 1 69 1   

Как вы можете видеть, большинство кодов продуктов отображаются только один раз. Когда я запускаю описание, такие показатели, как std, среднее значение и другие, по какой-то причине не отображаются.

Когда я специально запрашиваю выполнение стандартного отклонения, я получаю следующее

 df.groupby(['productcode'])['price'].std(ddof=0) Out: _  df[['productcode', 'price']].groupby(['productcode']).mean() Out: DataError: No numeric types to aggregate  

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

1. Привет, каков результат df.head(6).to_dict() ?

2. {‘код товара’: {0: ‘T1H4K’, 1: ‘T1K6X’, 2: ‘T1H4K’, 3: ‘T1H4K’, 4: ‘T1H6T’, 5: ‘T1H4K’}, ‘цена’: {0: ’47’, 1: ’28’, 2: ’47’, 3: ’47’, 4: ’19’, 5: ’47’}}

Ответ №1:

Итак, учитывая следующий игрушечный фрейм данных:

 import pandas as pd  df = pd.DataFrame(  {  "productcode": {  0: "T1H 4K3",  1: "T1H6X",  2: "T1H4K",  3: "T1H4K",  4: "T1H6X",  5: "T1H 4K3",  },  "price": {0: "47", 1: "28", 2: "47", 3: "25", 4: "19", 5: "47"},  } ) print(df) # Outputs  productcode price 0 T1H 4K3 47 1 T1H6X 28 2 T1H4K 47 3 T1H4K 25 4 T1H6X 19 5 T1H 4K3 47  

Вы можете получить стандартное отклонение для продуктов с таким же кодом, как этот:

 print(df.groupby("productcode").std()) # Outputs  price productcode T1H 4K3 0.000000 T1H4K 15.556349 T1H6X 6.363961  

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

1. Спасибо тебе за помощь, Лоран. Код возвращается со следующей ошибкой: Ошибка данных: Нет числовых типов для агрегирования. Я могу запустить тот же код с помощью функции count (). Я опубликую набор данных немного позже, как ранее просил @jezrael.

Ответ №2:

Пройдя через свою ошибку несколько раз, по-видимому, ошибка заключалась в том, что, когда я использовал to_numeric, либо с ошибками, вызванными, либо принудительно, на самом деле тип данных столбца не менялся, он оставался классифицированным как объект. С помощью

 df.price = df.price.astype(float)  

смог решить эту проблему. Вот также, почему, когда я попытался использовать метод description (), в нем были перечислены только показатели, применимые к категориальным переменным. Я очень признателен за ваши ответы @Laurent и @jezrael!