В наборе данных с миллионами записей у меня есть элементы с различными категориями и измерениями, и я пытаюсь выяснить, сколько записей изменилось, особенно когда категория или измерение переходит в NaN (или NULL из запрос к базе данных) во время последовательности.
В SQL я бы использовал для этого некоторые функции OLAP в стиле PARTITION, но кажется, что в Python с Pandas это должно быть довольно просто, но я могу Я не совсем понимаю, векторизованная нотация.
Я пробовал различные предложения df.groupby и лямбда-функции, но ничего не получалось в требуемом формате - в основном, df.groupby('item' )['measure'] в этом примере первая строка сгруппированного подмножества элемента и меры всегда возвращает True, где я бы хотел, чтобы это было False или NaN< /код>. Проще говоря, это ложные срабатывания. Я понимаю, что с точки зрения панд это изменение, поскольку первый x.shift() будет NaN, но я не могу понять, как это отфильтровать или обработать в лямбда-функции.Пример кода:
В выводе ниже, например, в строках 0, 8 и 16, значение Measure_change должно быть False. Таким образом, весь элемент 40 будет иметь значение Measure_change == False, и это будет указывать на отсутствие изменений в этом элементе. Любые предложения приветствуются.
(cat_change настраивается таким же образом)
В наборе данных с миллионами записей у меня есть элементы с различными категориями и измерениями, и я пытаюсь выяснить, сколько записей изменилось, особенно когда категория или измерение переходит в NaN (или NULL из запрос к базе данных) во время последовательности. В SQL я бы использовал для этого некоторые функции OLAP в стиле PARTITION, но кажется, что в Python с Pandas это должно быть довольно просто, но я могу Я не совсем понимаю, векторизованная нотация. Я пробовал различные предложения df.groupby и лямбда-функции, но ничего не получалось в требуемом формате - в основном, df.groupby('item' )['measure'] в этом примере первая строка сгруппированного подмножества элемента и меры всегда возвращает True, где я бы хотел, чтобы это было False или NaN< /код>. Проще говоря, это ложные срабатывания. Я понимаю, что с точки зрения панд это изменение, поскольку первый x.shift() будет NaN, но я не могу понять, как это отфильтровать или обработать в лямбда-функции.Пример кода: [code]import pandas as pd import numpy as np
test_df['measure_change'] = test_df.groupby('item')['measure'].transform(lambda x: x.shift() != x) test_df['cat_change'] = test_df.groupby('item')['cat'].transform(lambda x: x.shift() != x) [/code] В выводе ниже, например, в строках 0, 8 и 16, значение Measure_change должно быть False. Таким образом, весь элемент 40 будет иметь значение Measure_change == False, и это будет указывать на отсутствие изменений в этом элементе. Любые предложения приветствуются. (cat_change настраивается таким же образом)