2014-12-09 3 views
0

У меня есть ряд мультииндексный:Панды GroupBy ежемесячно + пересчитают

date  xcs subdomain  count 
2012-04-05 111-11 zero   10 
2012-04-11 222-22 m    25 
2012-04-11 111-11 zero   30 

В основном первые 3 столбца образует уникальный индекс. Мне нужно группировать по годам + xcs + субдомен, но счет нужно суммировать, делиться на количество элементов в этой группе и умножаться на 30. Таким образом, для [2012-04, 111-11, ноль] группы из приведенного выше примера, это будет (10 + 30)/2 * 30. Я предполагаю, что это идентично использованию функции average() для каждой группы, но все равно нужно умножить ее на 30.

Спасибо!

ответ

1

Один из способов сделать это следующим образом:

Настройте ваш фиктивный dataframe:

import pandas as pd 
data = """date  xcs subdomain  count 
2012-04-05 111-11 zero   10 
2012-04-11 222-22 m    25 
2012-04-11 111-11 zero   30""" 
df = pd.read_csv(pd.io.common.StringIO(data), sep="\s+") 
df['date'] = pd.to_datetime(df.date) 
df.set_index(['date', 'xcs', 'subdomain'], inplace=True) 

GroupBy и применять .mean умножения на 30:

df['value'] = (df.groupby(level=['date', 'xcs', 'subdomain']).mean() * 30).dropna() 
df 

Уступая:

       count value 
date  xcs subdomain    
2012-04-05 111-11 zero   10 300 
2012-04-11 222-22 m    25 750 
      111-11 zero   30 900 
+0

есть неполный код в df ['date'] = pd.to_datetime ...? – Yurik

+1

Да, извините, исправлено это. Я думаю, если бы вы предоставили код для создания образца данных, чтобы играть с этим, это бы не произошло :-) – Primer

Смежные вопросы