2016-12-16 72 views
1

我從一個excel文件中讀取數據,它是這樣的:集團由字典中的熊貓數據幀

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) 

編輯: 實現相同的結果的另一種方法是修改mapping字典,加入"Name": "Name"對給它,並調用mb2.groupby(by=mapping,axis=1).sum()和以前一樣。

+0

添加新列是可行的,但添加了「名」:「姓名」,以映射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

只有一種解決方案可以接受 - 如果我的或其他的解決方案是由您決定的。順便說一下,groupby by dict是非常好的;) – jezrael