根据其他列值梳理pandas数据帧值

时间:2016-02-26 19:50:55

标签: python numpy pandas dataframe

我有一个像这样的pandas数据框:

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

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

3 个答案:

答案 0 :(得分:1)

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

有关这方面的简要说明,从左到右:

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

答案 1 :(得分:0)

您可以使用数据透视表

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

答案 2 :(得分:0)

按所需列分组,求和number,并展平多指数:

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

在您的情况下,state列不可用,因此您可以缩短为:

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