【问题标题】:Determining the order of a set of columns based on their values根据列的值确定一组列的顺序
【发布时间】:2021-11-13 00:33:01
【问题描述】:

我正在尝试向我的 DataFrame 添加另一列,该列根据一组列的值提供一个字符串。例如,索引是教室里的孩子。这些值是他们对不同科目的考试成绩。额外的列显示了他们最好的科目的顺序。

Name | Math  | Eng  | Sci  | Law  | Econ |      | Additional column
---------------------------------------------------
David| 45    | 56.0 | 48.2 | 64.2 | 75.4 |      | Econ, Law, Eng, Math, Sci
Sarah| 63    | 78.0 | 63.7 | 48.7 | 89.2 |      | Econ, Eng, Sci, Math, Law
.....| ..    | .... | .... | .... | .... |      | ...
Cindy| 89    | 55.2 | 91.6 | 58.0 | 85.8 |      | Sci, Math, Econ, Law, Eng

我尝试遍历每一行并打印出一个单独的有序列列表,但在将其插入原始 DataFrame 之前它就出现了错误。

   new_column = [] 
   for i in range(len(test_results)):
      test_results.sort_values(by=test_results.loc[i], axis=1, ascending=False)
      new_column.append(list(test_results.columns.values))
      print(new_column)

很高兴收到一些关于如何解决此问题的新建议。

【问题讨论】:

  • 你能给我们错误信息吗

标签: python pandas sorting


【解决方案1】:

你可以试试这个:

df['Additional column'] = df.apply(lambda x: list(x.sort_values(ascending=False).index), axis=1)

【讨论】:

  • 谢谢!这个效果很好,尽管它仍然会吐出一个错误。不确定是否是因为 NaN 值(学生没有参加考试) SettingWithCopyWarning:试图在 DataFrame 的切片副本上设置值。尝试改用 .loc[row_indexer,col_indexer] = value
  • 好吧,我没有收到任何此类警告。
猜你喜欢
  • 2021-07-22
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多