我有一个如下数据框:
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参数的排序函数来做到这一点吗?
答案 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'])