Добавить столбец нормализованных значений на основе разделов столбца данных - PullRequest
1 голос
/ 09 июля 2019

У меня есть кадр данных из нескольких сотен тысяч строк.Который имеет следующий формат:

   time_elapsed  cycle
0          0.00      1
1          0.50      1
2          1.00      1
3          1.30      1
4          1.50      1
5          0.00      2
6          0.75      2
7          1.50      2
8          3.00      2

Я хочу создать третий столбец, который будет давать мне процент от каждого экземпляра времени, когда строка имеет цикл (до следующего time_elapsed = 0).Чтобы дать что-то вроде:

   time_elapsed  cycle  percentage
0          0.00      1           0
1          0.50      1          33
2          1.00      1          75
3          1.30      1          87
4          1.50      1         100
5          0.00      2           0
6          0.75      2          25
7          1.50      2          50
8          3.00      2         100

Меня не смущает количество десятичных знаков, я просто исключил их для простоты здесь.

Я начал идти по этому маршруту, ноЯ продолжаю получать ошибки.

data['percentage'] = data['time_elapsed'].sub(data.groupby(['cycle'])['time_elapsed'].transform(lambda x: x*100/data['time_elapsed'].max()))

Я думаю, что это лямбда-функция, вызывающая ошибки, но я не уверен, что мне следует сделать, чтобы изменить ее.Любая помощь очень ценится:)

1 Ответ

3 голосов
/ 09 июля 2019

Используйте Series.div для деления вместо sub для вычитания, тогда решение упрощается - получите только max для групп, кратных Series.mul, если необходимо Series.round и последнее преобразование в целые числа по Series.astype:

s = data.groupby(['cycle'])['time_elapsed'].transform('max')
data['percentage'] = data['time_elapsed'].div(s).mul(100).round().astype(int)
print (data)
   time_elapsed  cycle  percentage
0          0.00      1           0
1          0.50      1          33
2          1.00      1          67
3          1.30      1          87
4          1.50      1         100
5          0.00      2           0
6          0.75      2          25
7          1.50      2          50
8          3.00      2         100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...