проблема с np.where () для создания нового столбца в Pandas (возможно, проблема с NaN?) - PullRequest
0 голосов
/ 04 мая 2018

У меня есть фрейм данных с 2 столбцами, и я хочу создать 3-й столбец на основе сравнения между 2 столбцами.

Итак, логика такова: столбец 1 val = 3, столбец 2 val = 4, поэтому новым значением столбца будет ничто

столбец 1 val = 3, столбец 2 val = 2, поэтому новый столбец 3

Это очень похоже проблема на ранее заданную, но ответ там не работает для меня, используя np.where ()

Вот что я попробовал:

FinalDF['c'] = np.where(FinalDF['a']>FinalDF['b'],[FinalDF['a'],""])

и после того, как это не удалось, я попытался выяснить, может быть, ему не нравится [x, y], который я дал, поэтому я попытался:

FinalDF['c'] = np.where(FinalDF['a']>FinalDF['b'],[1,0])

результат всегда:

ValueError: either both or neither of x and y should be given

Редактировать: я также удалил [x, y], чтобы посмотреть, что происходит, так как документация говорит, что это необязательно. Но я все еще получаю ошибку:

ValueError: Length of values does not match length of index

Что странно, потому что они находятся в одном и том же кадре данных, , хотя в одном столбце есть некоторые значения Nan.

Я не думаю, что смогу использовать np.select , потому что у меня есть условие. Я связался с предыдущими вопросами, чтобы читатели могли ссылаться на них в будущих вопросах.

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 04 мая 2018

Я думаю, что это должно работать:

FinalDF['c'] = np.where(FinalDF['a']>FinalDF['b'], FinalDF['a'],"")

Пример:

FinalDF = pd.DataFrame({'a':[4,2,4,5,5,4],
               'b':[4,3,2,2,2,4],
               })
print FinalDF
   a  b
0  4  4
1  2  3
2  4  2
3  5  2
4  5  2
5  4  4

Выход:

   a  b  c
0  4  4   
1  2  3   
2  4  2  4
3  5  2  5
4  5  2  5
5  4  4   

или если столбец b должен иметь большее значение столбца a, используйте это:

FinalDF['c'] = np.where(FinalDF['a']<FinalDF['b'], FinalDF['b'],"")

Выход:

   a  b  c
0  4  4   
1  2  3  3
2  4  2   
3  5  2   
4  5  2   
5  4  4   
...