【发布时间】:2016-07-08 22:19:37
【问题描述】:
我正在尝试对数据框进行分组,同时按某列的绝对值对其进行排序。
groups values foo bar
75 A 3 1 2
77 B -3 31 34
112 A 4 0 4
129 C 50 5 3
134 C -60 44 5
在我可以使用的整个数据框上
df.reindex(df.values.abs().sort_values(ascending=False).index)
这工作得很好。但是,对于分组数据框,这显然是行不通的。
当我尝试时,
df.groupby('groups')['values'].reindex(df.values.abs().sort_values(ascending=False).index)
我得到了预期的错误:
AttributeError: Cannot access callable attribute 'reindex' of 'SeriesGroupBy' objects, try using the 'apply' method
尝试apply 可能需要为绝对值创建另一列,但我不想添加此列。有没有一种巧妙的方法来实现它?
所需的输出将是为值列排序的分组数据框(对象):
for groups, data in df_grouped:
print group, data
A,
values foo bar
75 3 1 2
112 4 0 4
B,
values foo bar
77 -3 31 34
C,
values foo bar
134 -60 44 5
129 50 5 3
【问题讨论】: