2016-12-16 73 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