我有一个像这样的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
这只是一个非常大的数据框的一部分,我如何为每年的每个名字做这个?
答案 0 :(得分:1)
df[['sex','year','name','number']].groupby(['sex','year','name']).sum().reset_index()
有关这方面的简要说明,从左到右:
df.drop('state',axis=1)
number
)。['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()