使用条件熊猫在两列上进行自定义排序

时间:2019-07-29 09:35:33

标签: python pandas sorting dataframe cmp

我有一个如下数据框:

df = pd.DataFrame({'id':[3333311,3455572,6464544,2323322,2222111,4333311,5454566,3321767],'A':['12 days','35 days','36 days','56 days','54 days','44 days','56 days','54 days'],'B':['6 days','31 days','33 days','46 days','44 days','16 days','41 days','42 days'],'Percentage':[0.41,0.36,0.36,0.42,0.25,0.56,0.25,0.42]})

              id        A         B       Percentage
    1       3333311   12 days   6 days    0.41
    3953    3455572   35 days   31 days   0.36
    46458   6464544   36 days   33 days   0.36
    39378   2323322   56 days   46 days   0.42
    115880  2222111   54 days   44 days   0.25
    115882  4333311   44 days   16 days   0.56
    118882  5454566   56 days   41 days   0.25
    118884  3321767   54 days   42 days   0.42

我想先按百分比对它进行排序。

然后,当抢七局出现时,它应该同时在A和B上进行排序

     if A.iloc[1] < A.iloc[2]
      and B.iloc[1] < B.iloc[2]
then df.iloc[2] should come first and vice versa.


But      if A.iloc[1] < A.iloc[2]
         and B.iloc[1] > A.iloc[2]

    or   if A.iloc[1] > A.iloc[2]
         and B.iloc[1] < A.iloc[2]

我已经尝试过了,但是没有得到准确的结果

df = df.sort_values(by='B').sort_values(by='A').sort_values(by='Percentage', ascending=False)

预期的输出将是这样的:

         id        A          B       Percentage
115882  4333311   44 days   16 days   0.56
39378   2323322   56 days   46 days   0.42
118884  3321767   54 days   42 days   0.42
1       3333311   12 days   6 days    0.41
46458   6464544   36 days   33 days   0.36
3953    3455572   35 days   31 days   0.36
118882  5454566   56 days   41 days   0.25
115880  2222111   54 days   44 days   0.25

现在这里有0.25%的抢七决定,条件是:              如果A.iloc [118882]> A.iloc [115880]              和B.iloc [118882]

在这里,我们将执行其他操作并考虑其他汇总。

我们可以通过带有cmp参数的排序函数来做到这一点吗?

2 个答案:

答案 0 :(得分:1)

在多列上使用sort_values,并使用descending参数将它们定义为ascending=False

df = df.sort_values(['Percentage', 'A', 'B'], ascending=[False, False, False])

输出

        id        A        B  Percentage
5  4333311  44 days  16 days        0.56
3  2323322  56 days  46 days        0.42
7  3321767  54 days  42 days        0.42
0  3333311  12 days   6 days        0.41
2  6464544  36 days  33 days        0.36
1  3455572  35 days  31 days        0.36
6  5454566  56 days  41 days        0.25
4  2222111  54 days  44 days        0.25

答案 1 :(得分:0)

使用df.sort_values(['Percentage','A','B'])