Как мне сделать среднее число плюс столбец с использованием фрейма данных Pandas? - PullRequest
0 голосов
/ 27 сентября 2018

Этот код выглядит действительно глупо, но это базовое представление проблемы, с которой я сталкивался весь день - у меня есть 3 столбца, тип, день и месяц.Я хотел бы посчитать количество собак / кошек по дням, а затем усреднить его за месяц.

import numpy as np
import pandas as pd

data = {'Type':['Dog', 'Cat', 'Cat', 'Cat', 'Dog', 'Dog', 'Dog', 'Cat'], 'Day':[1, 1, 2, 2, 3, 3, 4, 4], 'Month': [1, 1, 1, 1, 2, 2, 2, 2]}
newDF = pd.DataFrame(data)

, который создает фрейм данных, который выглядит следующим образом:

Type|Day|Month
---------
Dog|1|1
Cat|1|1
Cat|2|1
Cat|2|1
Dog|3|2
Dog|3|2
Dog|4|2
Cat|4|2

То, что я пытаюсь сделать здесь, это создать нижеприведенную таблицу, показывающую это:

Type | Month1 | Month2
------------------------

Dog  |   1    |   1.5

Cat  |   1.5  |    1

Итак, в основном, я просто хочу использовать некоторую комбинацию сводной таблицы или groupby для создания сводной таблицы, содержащей количество чиселкошек / собак в день, а затем усредните это за месяц.По какой-то причине я просто не могу понять это.Может кто-нибудь достаточно умный с пандами, пожалуйста, помогите?Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Просто groupby в сочетании с unstack и mean:

df.groupby(df.columns.tolist()) \ 
  .size() \
  .unstack(level='Day') \
  .mean(axis=1) \
  .unstack(level='Month')

Выход:

Month    1    2
Type           
Cat    1.5  1.0
Dog    1.0  1.5
0 голосов
/ 27 сентября 2018

Два groupbys + unstack

(newDF.groupby(['Type', 'Day', 'Month']).size()
      .groupby(level=[0,2]).mean()
      .unstack()
      .add_prefix('Month').rename_axis(None, 1))

Выход:

      Month1  Month2
Type                
Cat      1.5     1.0
Dog      1.0     1.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...