簡體   English   中英

熊貓分組數據框並按列值排序

[英]Pandas group data frame and sort by column value

我試圖對數據框進行分組,並同時按某個列的絕對值對其進行排序。

        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

UPDATE2:

In [433]: for g,x in grp:
   .....:     print(g, x)
   .....:
A     groups  values  foo  bar
112      A       4    0    4
77       A       3    1    2
B    groups  values  foo  bar
77      B      -3   31   34
C     groups  values  foo  bar
134      C     -60   44    5
129      C      50    5    3

更新:准備分組:

In [428]: grp = (df.assign(abs_val=df['values'].abs())
   .....:          .sort_values(['groups','abs_val'], ascending=[1,0])
   .....:          .drop('abs_val', 1)
   .....:          .groupby('groups'))

In [429]: grp.agg({'foo': ['first','last'], 'bar': ['min','mean','max']})
Out[429]:
         foo      bar
       first last min mean max
groups
A          0    1   2    3   4
B         31   31  34   34  34
C         44    5   3    4   5

舊答案:

In [393]: df.assign(abs_val=df['values'].abs()).sort_values(['groups','abs_val'], ascending=[1,0]).drop('abs_val', 1)
Out[393]:
    groups  values
112      A       4
77       A       3
77       B      -3
134      C     -60
129      C      50

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM