2016-02-26 135 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()