【问题标题】:Sorting the same column by conditions applied from other columns按从其他列应用的条件对同一列进行排序
【发布时间】:2022-02-01 21:18:01
【问题描述】:

我真的很难解决以下数据框排序问题。感谢您对此的帮助。 基本上,我有以下数据框:

col1    col2    col3    col4
a       0.55    0.22    1
a        0.7    0.16    1
b       0.88    0.18    2
b        0.9    0.23    2
b        0.6    0.33    2
c        0.5    0.11    3
c       0.23    0.05    3
d        0.4    -0.15   3
b        0.65   0.1     1

我希望根据 col1 的值对我的数据框进行排序。如果 col1 值等于 a 或 b,那么我想按 col2 降序对数据帧进行排序,如果我的 col1 值等于 c 或 d,那么我希望我的数据帧按 col3 排序。 输出应如下所示:

col1    col2    col3    col4
b        0.9    0.23    2
b       0.88    0.18    2
a        0.7    0.16    1
b        0.65   0.33    2
b        0.6    0.1     1
a       0.55    0.22    1
c        0.5    0.11    3
c       0.23    0.05    3
d        0.4    -0.15   3

我不介意 Pandas 或 Pythonic 形式的任何帮助。 谢谢

【问题讨论】:

  • 我是否理解正确,您根本不想按 col1 排序,而是根据情况仅按 col2 或 col3 排序?
  • 是的,我只想按 col2 和 col3 排序

标签: python pandas sorting


【解决方案1】:

您可以创建一个附加列,根据 col1 中的值从 col2col3 获取值,然后对其进行排序 -

df.loc[:, 'sort_col'] = df['col1'].isin(['a', 'b']) * df['col2'] + df['col1'].isin(['c', 'd']) * df['col3']
df = df.sort_values(by=['sort_col'], ascending=False)
df

#   col1  col2  col3  col4  sort_col
#3    b  0.90  0.23     2      0.90
#2    b  0.88  0.18     2      0.88
#1    a  0.70  0.16     1      0.70
#8    b  0.65  0.10     1      0.65
#4    b  0.60  0.33     2      0.60
#0    a  0.55  0.22     1      0.55
#5    c  0.50  0.11     3      0.11
#6    c  0.23  0.05     3      0.05
#7    d  0.40 -0.15     3     -0.15

【讨论】:

  • 谢谢莫茨。我很感激。
猜你喜欢
  • 2020-10-22
  • 2016-03-13
  • 2011-02-03
  • 2022-08-11
  • 2018-05-28
  • 2012-12-07
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
相关资源
最近更新 更多