Как рассчитать агрегированную сводную статистику в кадре данных Pandas - PullRequest
2 голосов
/ 28 марта 2019

У меня есть датафрейм Pandas, похожий на этот:

>>> df = pd.DataFrame(data=np.array([['red', 'cup', 1.50], ['blue', 'jug', 2.40], ['red', 'cup', 1.75], ['blue', 'cup', 2.30]]),
...                   columns=['colour', 'item', 'price'])
>>> df
  colour item price
0    red  cup   1.5
1   blue  jug   2.4
2    red  cup  1.75
3   blue  cup   2.3

Какой самый краткий способ расчета сводной статистики цены для каждой из возможных комбинаций цвета и предмета?

Ожидаемый результат, например ::1006

colour     item      mean     stdev
red        cup       1.625    0.176
blue       jug       2.4      NA
blue       cup       2.3      NA

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Обратите внимание на то, как при создании информационного кадра цена столбцов переходит в строковое, а не числовое значение, поскольку numpy array принимает только один dtype

Выполнить:

df.price=pd.to_numeric(df.price)

Я буду использовать describe после groupby

df.groupby(['colour','item']).price.describe()# you can add reset_index() here
             count   mean       std  min     25%    50%     75%   max
colour item                                                          
blue   cup     1.0  2.300       NaN  2.3  2.3000  2.300  2.3000  2.30
       jug     1.0  2.400       NaN  2.4  2.4000  2.400  2.4000  2.40
red    cup     2.0  1.625  0.176777  1.5  1.5625  1.625  1.6875  1.75

Или вы можете использовать agg

df.groupby(['colour','item']).price.agg(['std','mean'])
1 голос
/ 28 марта 2019

Вы можете использовать groupby в сочетании с .agg и передать ему функции mean и std:

print(df.groupby(['colour', 'item']).agg({'price':['mean', 'std']}).reset_index())

  colour item  price          
                mean       std
0   blue  cup  2.300       NaN
1   blue  jug  2.400       NaN
2    red  cup  1.625  0.176777
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...