基于其他列值组合数据帧值

2024-06-16 13:24:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个数据帧:

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

这只是一个非常大的数据帧的一部分,我该如何为每年的每个名字都这样做?你知道吗


Tags: columns数据nameimportnumberdataframedfas
3条回答
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']不再是索引的一部分。你知道吗

按所需列分组,求和number,并展平多索引:

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

在您的例子中,state列不能求和,因此您可以缩短为:

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

可以使用透视表

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

相关问题 更多 >