我试图按多个列进行分组,并返回数据帧中选择列的总和。我只按一列分组就能做到这一点。
df_sum = df.iloc[:, 27:].groupby(df['id']).sum().reset_index()
我成功地按id
分组,并将从第27列到数据帧末尾的值相加。但是,当我尝试使用以下方法按多列分组时
df_sum = df.iloc[:, 27:].groupby(df['id', 'year']).sum().reset_index()
我犯了个错误
KeyError: ('id', 'year')
在此之前,我已经能够按多个列进行分组,方法如下
df.groupby(['id', 'year'])['some col name'].nunique().reset_index()
我试过使用这种格式
df.groupby(['id', 'year'])[df.iloc[:,27:]].sum().reset_index()
但是它也不能工作,因为我得到了另一个错误。
TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed
我现在有点搞不懂我怎么才能让这件事起作用。我觉得我一定忽略了一些相对简单的东西,因为我能够让它按一列进行分组。当按多列分组时,我只是很难找到一种让它工作的方法。
发布于 2019-12-14 19:52:17
检查id列是否在子集“从第27列到末尾”.
我认为本专栏在df中位于早期的位置。
另一种尝试方法
生成列的目标列表:
cols = df.columns[27:]
然后在你的指令中使用它:
df.groupby(['id', 'year'])[cols].sum().reset_index()
注意,cols本身是一个列表,但在上面的指令中,它必须用另一对方括号“包围”。
https://stackoverflow.com/questions/59335233
复制相似问题