Я пытаюсь найти способ определить ранг, используя несколько столбцов в кадре данных панд.Эти столбцы могут вноситься в разных порядках, то есть в порядке возрастания или убывания, и могут иметь разные типы, например, int или str.
Я пытался поместить данные столбца в кортеж, а затем ранжировать их, используя метод ранга.Тем не менее, это обеспечивает только ранг в порядке возрастания или убывания для обоих столбцов.
import pandas as pd
df = pd.DataFrame(data={'String':['a','a','a','a','b'],'Integer':[1,2,3,3,1]})
df['tup'] = df.apply(tuple,axis=1)
# For both columns taken into account in ascending order
df['rank'] = df['tup'].rank()
# For both columns taken into account in descending order
df['rank'] = df['tup'].rank(ascending=False)
Я ожидаю, что выходные данные будут такими, как показано ниже, с String, принятой в качестве возрастания, и Integer, как по убыванию
# Expected
String Integer tup rank
0 a 1 (a, 1) 4.0
1 a 2 (a, 2) 3.0
2 a 3 (a, 3) 1.5
3 a 3 (a, 3) 1.5
4 b 1 (b, 1) 5.0
но вместо этого для обоих столбцов учитывается как возрастающий
# Actual
String Integer tup rank
0 a 1 (a, 1) 1.0
1 a 2 (a, 2) 2.0
2 a 3 (a, 3) 3.5
3 a 3 (a, 3) 3.5
4 b 1 (b, 1) 5.0