2017-08-10 74 views
2

我有以下代码:熊猫GROUPBY存储在一个新的数据帧

import pandas as pd 
df1 = pd.DataFrame({'Counterparty':['Bank','Bank','GSE','PSE'], 
      'Sub Cat':['Tier1','Small','Small', 'Small'], 
      'Location':['US','US','UK','UK'], 
      'Amount':[50, 55, 65, 55], 
      'Amount1':[1,2,3,4]}) 

df2=df1.groupby(['Counterparty','Location'])[['Amount']].sum() 
df2.dtypes 
df1.dtypes 

的DF2数据帧没有,我汇总了各列(交易对手和地点)。任何想法,为什么是这种情况?金额和金额1都是数字字段。我只是想从指数跨越Amount1

+0

http://pandas.pydata.org/pandas-docs/stable/groupby.html#automatic-exclusion-of-nuisance-columns –

回答

7

跨越金额和总总结为列添加as_index=False参数或reset_index:由所有列

df2=df1.groupby(['Counterparty','Location'])[['Amount']].sum().reset_index() 
print (df2) 
    Counterparty Location Amount 
0   Bank  US  105 
1   GSE  UK  65 
2   PSE  UK  55 

df2=df1.groupby(['Counterparty','Location'], as_index=False)[['Amount']].sum() 
print (df2) 
    Counterparty Location Amount 
0   Bank  US  105 
1   GSE  UK  65 
2   PSE  UK  55 

如果聚集在这里发生automatic exclusion of nuisance columns - 省略列Sub Cat

df2=df1.groupby(['Counterparty','Location']).sum().reset_index() 
print (df2) 
    Counterparty Location Amount Amount1 
0   Bank  US  105  3 
1   GSE  UK  65  3 
2   PSE  UK  55  4 


df2=df1.groupby(['Counterparty','Location'], as_index=False).sum() 
+1

添加'.reset_index()'总是很不错的。 –

+0

与.reset_index()一起工作。将不得不阅读为什么.reset_index()是必要的! –

+0

超级,抱歉,首先我不明白你的问题。如果我的回答有帮助,请不要忘记[接受](http://meta.stackexchange.com/a/5235/295067) - 点击答案旁边的复选标记('✓')将其从灰色出来填补。谢谢。 – jezrael

0

删除围绕'Amount'的双括号,并使它们成为单个括号。你告诉它只选择一列。