У меня есть фрейм данных из более чем миллиона строк с такой примерной структурой:
Тип ID Значение1 Значение2 ... (больше столбцов)
1 A 20 4 ...
2 A 30 5 ...
3 B 14 7 ...
4 B 12 9 ...
.....
НадеюсьЯ мог бы получить
Идентификатор Тип Значение1 Значение2 Pct_Rank_based_on_Value1 ... (больше столбцов)
1 A 20 4 0.107 ...
2 A 30 5 0,021 ...
3 B 14 7 0.201 ...
4B 12 9 0,875 ...
.....
ранг должен быть в порядке убывания значения.Максимальное значение должно иметь значение около 0,001
. И для пояснения, моя цель - создать новый столбец, который представляет собой процентное ранжирование значения Value1 строки (которое является столбцом дискретных чисел) в пределах его типа (который является столбцом строк, только 10 уникальных значений).
Для строки 1 идентификатор равен 1, тип равен A, значение равно 20, я хотел бы вычислить его pct-ранг значения Value1 в тех строках, тип которых также равен A.
Я проверил несколько реализаций поста и думаю об использовании
df ['Pct_Rank'] = pd.DataFrame (df.groupby ("Type"). Index.get_level_values ('Value1') .rank (pct = True)
Но я не уверен, правильно ли это.
Я думал о создании подкадров с каждым типом и сортировке ихоснованный на Value1, но как искать позицию для значений каждой строки в соответствующем типе? После этого я мог бы написать функцию и применить к каждой строке, вычисляя ее pct rank на
increment_type_A = 1 / lengthA
....
, если type == A:
pct_rank = increment_typeA * position_in_its_type
.......
Кстати, есть ли параметры для установки pct? Например, точность? Я хочу что-то вроде 0.001 как минимум.
Updates
Я просто переформатировал мой образец.Стол был испорчен после того, как я выбрал их и выбрал «жирный».
Только что отредактировано, чтобы уточнить, что в нем более 1 числового столбца.И Value1 - это не первый столбец с числовым значением.