Сравнение неидентичного кадра данных панд с объектом серии - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть следующее pandas.core.series.Series:

Color
Red      4
Green    7

, а также следующий мультииндексный фрейм данных. Моя цель - создать столбец Target в кадре данных, проверив, меньше ли столбец Value в кадре данных, чем соответствующее значение цвета в pandas.core.series.Series, и вернуть 1, если это так. Например, в первой строке значение в столбце Value в кадре данных равно 12, что больше соответствующего значения индекса, соответствующего 4, в объекте серии панд, и поэтому Target возвращает 0.

              Value    Target
Color Animal       
Red   Tiger      12      0
      Tiger      3       1
Green Lion       6       1
      Lion       35      0

Моя следующая попытка получает ValueError: Can only compare identically-labeled Series objects.

import pandas as pd
import numpy as np
x = pd.Series([4,7], index=['Red','Green'])
x.index.name = 'Color'

dt = pd.DataFrame({'Color': ['Red','Red','Green','Green'], 'Animal': ['Tiger','Tiger','Lion','Lion'],  'Value': [12,3,6,35]})
dt.set_index(['Color','Animal'], inplace=True)
dt['Target'] = np.where(dt['Value'] < x ,1 ,0 )

1 Ответ

0 голосов
/ 10 сентября 2018

Используйте lt вместо оператора и укажите ось.

dt['Target'] = dt['Value'].lt(x, axis=0).astype(int)
print (dt)
              Value  Target
Color Animal               
Red   Tiger      12       0
      Tiger       3       1
Green Lion        6       1
      Lion       35       0

lt = "меньше"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...