我有一个带有多列的熊猫数据框(可能有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)解决方案。