2016-12-16 5 views
1

Я считывать данные из файла Excel, это так:группы по словарю в панде DataFrame

enter image description here

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

import pandas as pd 

mb2 = pd.read_excel('C:\\Users\\IBM_ADMIN\\Desktop\\ml-1m\\工作簿1.xlsx', sheetname='Sheet3') 
mapping = {'Jan':'Q1','Feb':'Q1','Mar':'Q1','Apr':'Q2','May':'Q2','Jun':'Q2'} 
mb2.groupby(by=mapping,axis=1).sum() 

enter image description here

Как показать также поле Имя? Я стараюсь делать так, но это не сработало:

mb2.groupby(by=(mapping,'Name'),axis=1).sum() 

ответ

1

Быстрое решение заключается в сохранении в новой переменной в результате DataFrame (grouped_data в следующем коде), а затем присвоить Name колонки к нему с помощью оригинал DataFrame:

grouped_data = mb2.groupby(by=mapping,axis=1).sum() 
grouped_data['Name'] = mb2['Name'] 
print(grouped_data) 

EDIT: Другой способ достижения того же результата, чтобы изменить mapping словарь, добавив "Name": "Name" пару к нему, и призывая mb2.groupby(by=mapping,axis=1).sum() как раньше.

+0

добавить новый столбец является работоспособным, но с добавлением «Name»: «Name» для отображения DIC не работает, – tonyibm

+0

Какая версия Панды вы бежите? Я попробовал два решения на версии 0.19.1, и оба работали. – Blackecho

+0

вот так: mapping = {'Name': 'Name', Jan ':' Q1 ',' Feb ':' Q1 ',' Mar ':' Q1 ',' Apr ':' Q2 ',' May ':' Q2 ',' Jun ':' Q2 '} mb2_new = mb2.groupby (by = mapping, axis = 1) .sum() – tonyibm

2

Вы можете использовать set_index первыми, затем groupby и последний reset_index:

df = mb2.set_index('Name').groupby(by=mapping,axis=1).sum().reset_index() 
print (df) 
     Name Q1 Q2 
0  Tony 1367 1835 
1 Rafal 1405 2574 
2  John 1550 1409 
3 Katrina 1555 1509 
4 Kathy 1583 1491 
5  Tom 1344 1874 
+0

это работает, спасибо – tonyibm

+0

Только одно решение может быть принято - это зависит от вас, если он мой или другой. Btw, groupby by dict очень приятно;) – jezrael

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