Как использовать векторизованные вычисления в пандах, чтобы узнать, где меняется значение или категория с исправленной пPython

Программы на Python
Ответить
Anonymous
 Как использовать векторизованные вычисления в пандах, чтобы узнать, где меняется значение или категория с исправленной п

Сообщение Anonymous »

В наборе данных с миллионами записей у меня есть элементы с различными категориями и измерениями, и я пытаюсь выяснить, сколько записей изменилось, особенно когда категория или измерение переходит в NaN (или NULL из запрос к базе данных) во время последовательности.
В SQL я бы использовал для этого некоторые функции OLAP в стиле PARTITION, но кажется, что в Python с Pandas это должно быть довольно просто, но я могу Я не совсем понимаю, векторизованная нотация.
Я пробовал различные предложения df.groupby и лямбда-функции, но ничего не получалось в требуемом формате - в основном, df.groupby('item' )['measure'] в этом примере первая строка сгруппированного подмножества элемента и меры всегда возвращает True, где я бы хотел, чтобы это было False или NaN< /код>. Проще говоря, это ложные срабатывания. Я понимаю, что с точки зрения панд это изменение, поскольку первый x.shift() будет NaN, но я не могу понять, как это отфильтровать или обработать в лямбда-функции.Пример кода:

Код: Выделить всё

import pandas as pd
import numpy as np

test_df = pd.DataFrame({'item': [20, 20, 20, 20, 20, 20, 20, 20, 30, 30, 30, 30, 30, 30, 30, 30, 40, 40, 40, 40, 40, 40, 40, 40 ],
'measure': [1, 1, 1, 3, 3, 3, 3, 3, 6, 6, 6, 6, 6, 7, 7, 7, 10, 10, 10, 10, 10, 10, 10, 10 ]})

test_df['measure_change'] = test_df.groupby('item')['measure'].transform(lambda x: x.shift() != x)
В выводе ниже, например, в строках 0, 8 и 16, значение Measure_change должно быть False. Таким образом, весь элемент 40 будет иметь значение Measure_change == False, и это будет указывать на отсутствие изменений в этом элементе. Любые предложения приветствуются.



#
элемент
мера
measure_change



0
20
1
Верно


1
20
1
Ложь


2
20
1
Ложь


3
20
3
Верно


4
20
3
Ложь


5
20
3
Ложь


6
20
3
Неверно


7
20
3
Ложь


8
30
6
Верно


9
30
6
Ложь


10
30
6
Ложь


11
30
6
Ложь


12
30
6
Ложь


13
30
7
Верно


14
30
7
Ложь


15
30
7
Ложь


16
40
10
Верно


17
40
10
Ложь


18
40
10
Ложь< /td>


19
40
10
Неверно


20
40
10Ложно


21
40
10
Ложь


22
4010
Ложь


23
40
10
False




Подробнее здесь: https://stackoverflow.com/questions/793 ... -or-catego
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»