属性错误: 无法访问'DataFrameGroupBy'对象的可调用属性'reset_index',请尝试使用'apply'方法。

8

我在pandas中非常新手,想要使用groupby。我有一个包含多列的数据框。

  • 我想要按照特定的一列进行分组,然后根据另一列对每个分组进行排序。
  • 我想要按照col1 进行分组,然后按照col5 对每个分组进行排序,然后使用reset_index 来获取所有行。
  • 我得到了以下错误信息:AttributeError: Cannot access callable attribute 'reset_index' of 'DataFrameGroupBy' objects, try using the 'apply' method

我的输入数据框:

col1 |  col2 | col3 | col4 | col5
=================================
A    |   A1   | A2   | A3   | DATE1
A    |   B1   | B2   | B3   | DATE2

我的代码:

df.sort_values(['col5'],ascending=False).groupby('col1').reset_index()

1
你的 groupby 代码是什么? - jezrael
提供样本输出 - Vivek Kalyanarangan
@jezrael:我已经提供了示例代码。 - Gingerbread
3个回答

6

对于 groupby,需要一些聚合函数,比如 meansummax

df.sort_values(['col5'],ascending=False).groupby('col1').mean().reset_index()

或者:

df.sort_values(['col5'],ascending=False).groupby('col1', as_index=False).mean()

这将我的数据框形状从 (124,14) 缩减为 (9,6)。我想要所有的 124 行,请帮忙一下好吗? - Gingerbread
抱歉,这并不是基于原帖发布的代码的答案。他们正在进行排序而不是汇总函数。并且他们想要所有数据框行。 - smci

2
你可以尝试下面的代码,我遇到过类似的问题。最初的回答。
grouped=data.groupby(['Colname'])
grouped.apply(lambda _df: _df.sort_values(by=['col_to_be_sorted']))


1
你可以使用。
grouped = df.sort_values(['col5'],ascending=False).groupby('col1',as_index = False).apply(lambda x: x.reset_index(drop = True))
grouped.reset_index().drop(['level_0','level_1'],axis = 1)

请参考此stackoverflow链接,其中包含一个示例,以清晰地解释如何一步重置所有组的DataFrame索引。 如何在一步中为所有组重置DataFrame索引?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接