Используя Python pandas, как мне создать функцию для вычисления доли строк, которые представляют меньшее значение, чем предыдущая строка? - PullRequest
3 голосов
/ 18 июня 2020

Используя Python pandas, как мне создать функцию для вычисления доли строк, которые представляют меньшее значение, чем предыдущая строка? Другими словами, мне нужна функция для перебора значений в столбце определенной серии кадра данных Pandas и подсчета только тех значений, в которых значение следующей строки (например, в столбце «Пробег») меньше текущего. значение строки. Например, у вас есть это: Пробег: 1 строка 30 строка 2:20 строка 3:40 строка 4:50 строка 5:60 строка 6:55 строка 7: 75

Если счетчик работает правильно, он обнаружит, что значение 20 для строки 2 меньше значения 30 для строки 1, и поэтому он добавит +1 к счетчику (посчитайте его).
В приведенном выше примере другая строка, которую он должен считать, - это строка 6:55 что меньше, чем его предыдущая строка 5:60, поэтому посчитайте эту строку. Итак, окончательный подсчет будет следующим: 2. И затем я могу разделить это окончательное количество на общее количество строк, чтобы получить пропорцию.

Заранее благодарю вас за любую помощь!

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

Вы можете сделать это с помощью функции series.shift:

proportion = len(df[df['Mileage'] < df['Mileage'].shift(1)])/len(df)
print(proportion)

output:

0.2857142857142857

часть кода:

df[df['Mileage'] < df['Mileage'].shift(1)]

Использует маскирование только для выбора строк, которые соответствуют этому условию (в данном случае 2), и поэтому мы берем len этого числа, деленное на общее len df, и получаем пропорцию. .shift(1) позволяет вам получить доступ к значению следующей строки, чтобы вы могли таким образом сравнивать с текущей строкой.

0 голосов
/ 18 июня 2020

Вы можете использовать функцию pandas shift() следующим образом:

import pandas as pd
data = {'mileage': [30,20,40,50,60,55,75] }
df = pd.DataFrame(data)
smaller_rows = (df.mileage < df.mileage.shift()).sum()
print(smaller_rows)
out[]: 2

Как это работает? Shift (), как следует из названия, сдвигает значения столбца пробега на 1 строку дальше (по умолчанию 1, любая сумма может быть указана с помощью ключа periods). Затем оба DataFrames сравниваются друг с другом, что создает массив логических значений. Применение sum() приведет к подсчету количества истинных.

Чтобы получить пропорцию, вы хотите разделить smaller_rows на общее количество строк, например:

proportion = smaller_rows/len(df) 
...