numpy, где выполняется поиск нескольких условий с предварительно вычисленной серией

avatar
Radcriminal
1 июля 2021 в 16:38
59
1
2

У меня есть список с несколькими сериями с логическими значениями и pandas DataFrame. Количество серий в списке варьируется.

s1 = {Series: (4,)} (0, True) (1, True) (2, True) (3, True)
s2 = {Series: (4,)} (0, True) (1, True) (2, True) (3, False)
list_with_series = [s1, s2]

df = {DataFrame: (4, 8)}

Я хочу использовать numpy.where, чтобы добавить столбец в DataFrame с таким тегом:

df['Tag'] = numpy.where(' & '.join(list_with_series), 'Tag_name', '')

Когда я пытаюсь присоединиться к серии, я получаю эту ошибку:

TypeError: sequence item 0: expected str instance, Series found

Я не могу напрямую указать серию, например numpy.where(s1 & s2), потому что количество серий является динамическим. Я также пытаюсь использовать numpy, потому что он требует меньше памяти.

Как лучше всего сопоставить и пометить строки в DataFrame, не изменяя использование предварительно вычисленных рядов с логическими значениями? Можно ли вообще использовать numpy в таком сценарии?

Спасибо!

Источник
Ch3steR
1 июля 2021 в 16:43
0

Код, который вы разместили, это вообще питон? Я не могу понять, что это за s1 = {Series: (4,)} (0, True) (1, True) (2, True) (3, True). Можете выложить рабочий код?

Radcriminal
1 июля 2021 в 17:05
0

Вот как это выглядит в отладчике pycharm. Это представление серии, я думаю, это возврат магического метода str. Для нас это ряд с 4 булевыми элементами

Ch3steR
1 июля 2021 в 17:26
0

Ох, ладно. Благодарю за разъяснение. Понял :)

Ответы (1)

avatar
Ami Tavory
1 июля 2021 в 16:45
1

Когда вы пишете ' & '.join(...) в этом случае, предполагается, что вы будете передавать строки, а не ряды. Это ошибка.

В этом случае вы можете использовать:

import numpy as np

np.logical_and.reduce([s.values for s in list_with_series])
Radcriminal
1 июля 2021 в 18:07
0

Есть ли способ использовать логический и среди нескольких рядов получить только один, где: Истина и Истина = Истина; Правда и Ложь = Ложь? Это должно помочь мне сократить несколько серий до одной и использовать ее в функции np.where.

Radcriminal
1 июля 2021 в 18:38
0

Я понял. именно это вы мне и посоветовали