2016-02-26 170 views
0

我有一个熊猫数据帧像这样:梳理大熊猫据帧值的值

import pandas as pd 
import numpy as np 

df = pd.DataFrame([['WY','M',2014,'Seth',5], 
      ['WY','M',2014,'Spencer',5], 
      ['WY','M',2014,'Tyce',5], 
      ['NY','M',2014,'Seth',25], 
      ['MA','M',2014,'Spencer',23]],columns = ['state','sex','year','name','number']) 

print df 

如何处理数据,以得到这样一个数据帧:

df1 = pd.DataFrame([['M',2014,'Seth',30], 
       ['M',2014,'Spencer',28], 
       ['M',2014,'Tyce',5]], 
columns = ['sex','year','name','number']) 

print df1 

这只是一部分一个非常大的数据框,我如何为每一年的每个名字做这个?

回答

1
df[['sex','year','name','number']].groupby(['sex','year','name']).sum().reset_index() 

为了什么这样做,从一个简要说明左到右:

  1. 选择只列我们所关心的。我们可以用df.drop('state',axis=1)替换这部分
  2. 在我们关心的列上执行groupby。
  3. 总计剩余的列(在这种情况下,仅为number)。
  4. 重置索引,以使列['sex','year','name']不再是索引的一部分。
0

,你可以通过你想要的列,总和number使用数据透视表

df.pivot_table(values = 'number',aggfunc = 'sum',columns = ['sex','year','name']).reset_index().rename(columns={0:'number'}) 
0

集团,和扁平的多指标:

df.groupby(['sex','year','name'])['number'].sum().reset_index() 

在你的情况下,列state不总结,所以你可以缩短到:

df.groupby(['sex','year','name']).sum().reset_index()