【问题标题】:Groupby and sort multiple columns' values raising an AttributeError: 'DataFrameGroupBy' object has no attribute 'sort_values'Groupby 并排序多个列的值引发 AttributeError:“DataFrameGroupBy”对象没有属性“sort_values”
【发布时间】:2022-01-25 20:17:35
【问题描述】:

对于下面的玩具数据集,我正在尝试按target_name 分组并按多列对值进行排序:valid_msevalid_r2_score 使用:df.groupby('target_name').sort_values(by=['valid_mse', 'valid_r2_score'], ascending=[True, False])

  target_name  train_mse  valid_mse  train_r2_score  valid_r2_score
0         CPI   1.102079   1.842212        0.947458       -0.624665
1         CPI   1.301734   1.890085        0.928005       -0.777463
2         CPI   0.471222   1.078413        0.990599        0.311849
3         PPI   0.113998   0.135523        0.662532        0.262387
4         PPI   0.095434   0.176431        0.752242       -0.422994
5         PPI   0.097648   0.174544        0.744522       -0.203880

但它会引发错误:AttributeError: 'DataFrameGroupBy' object has no attribute 'sort_values'。我还尝试使用df.groupby('target_name').sort_values(by='valid_mse', ascending=True) 对一列进行排序,它会引发同样的错误。

有谁知道我该如何正确解决这个问题?谢谢。

字典格式的数据:

{'target_name': {0: 'CPI', 1: 'CPI', 2: 'CPI', 3: 'PPI', 4: 'PPI', 5: 'PPI'},
 'train_mse': {0: 1.102079409,
  1: 1.301734392,
  2: 0.471221642,
  3: 0.11399796,
  4: 0.09543417,
  5: 0.097647639},
 'valid_mse': {0: 1.842212034,
  1: 1.890085418,
  2: 1.078413107,
  3: 0.135523283,
  4: 0.176431247,
  5: 0.174543796},
 'train_r2_score': {0: 0.947458162,
  1: 0.928005473,
  2: 0.990599137,
  3: 0.662532128,
  4: 0.752241595,
  5: 0.744522334},
 'valid_r2_score': {0: -0.624665246,
  1: -0.777462993,
  2: 0.311849214,
  3: 0.262387135,
  4: -0.422993602,
  5: -0.203880075}}

参考链接:

How to sort a dataFrame in python pandas by two or more columns?

【问题讨论】:

    标签: python-3.x pandas dataframe pandas-groupby


    【解决方案1】:

    groupBy(groupby创建的对象)中没有sort_values

    难道不可以通过简单地在三列中排序来获得所需的数据吗?比如:

    df.sort_values(by=['target_name', 'valid_mse', 'valid_r2_score'],
                   ascending=[True, True, False])
    

    这将首先按 target_name 列排序,然后按 valid_mse,然后按 valid_r2_score,因此可以说是您所追求的:

      target_name  train_mse  valid_mse  train_r2_score  valid_r2_score
    2         CPI   0.471222   1.078413        0.990599        0.311849
    0         CPI   1.102079   1.842212        0.947458       -0.624665
    1         CPI   1.301734   1.890085        0.928005       -0.777463
    3         PPI   0.113998   0.135523        0.662532        0.262387
    5         PPI   0.097648   0.174544        0.744522       -0.203880
    4         PPI   0.095434   0.176431        0.752242       -0.422994
    

    【讨论】:

    • 我发现按valid_mse, valid_r2_score 之类的两个值列排序似乎是多余的,除非valid_msetarget_name 组中具有相同的值。
    • 没错,给定这个数据样本,我发现了同样的事情
    • 我这样做的原因是试图找到具有最低验证mse和最高r2分数的预测结果。
    猜你喜欢
    • 2021-07-03
    • 2021-05-01
    • 2019-12-04
    • 2016-04-11
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    相关资源
    最近更新 更多