根据特定条件对两个熊猫列进行排序的有效方法

时间:2020-08-30 13:10:19

标签: python pandas dataframe sorting

我有一个带有多列的熊猫数据框(可能有None值),我想以一种特定的方式订购其中的两个。假设数据框为:

import pandas as pd
df = pd.DataFrame({'YN': ['N', 'Y']*10,
                   ... ,
                   'A': [150, 5, 168, 3, 7, 145, None, 4, None, 167],
                   'B': [134, 4, 3, 123, 3, 143, 134, 2, 145, 1]})

因此类似:

  YN ... A    B
0  N ... 150  134
1  Y ... 5    4
2  N ... 168  3
3  Y ... 3    123
4  N ... 7    3
5  Y ... 145  143
6  N ... None 134
7  Y ... 4    2
8  N ... None 145
9  Y ... 167  1 
...

然后,我要对每一列进行排序,以使在具有N的行(恰好是偶数行)中获得大数(假设> 100),在具有Y的列中获得小数数字(假设<100)。重要的是要说明信息是按2对成对构造的,也就是说,前两行形成一个“实体”,然后是3行和4行,依此类推。因此,如果大数位于奇数位置,则应使用相同“实体”的对应小数进行切换,例如A列的第4行和第5行。None值可以视为大或小,如果相同的“实体”的其他值较小(如A列的第6行),反之亦然(如A的第8行),则该值较大。

这样,预期结果应该是:

  YN ... A    B
0  N ... 150  134
1  Y ... 5    4
2  N ... 168  123
3  Y ... 3    3
4  N ... 145  143
5  Y ... 7    3
6  N ... None 134
7  Y ... 4    2
8  N ... 167 145
9  Y ... None  1 
...

注意: YN顺序在整个df中都保持不变。

我想做的是获取每一列作为数组,通过遍历数组并应用一些if / else条件对数组进行排序,最后将该值分配给数据帧。但是我认为根本不是最有效的(pythonic)解决方案。

0 个答案:

没有答案