Как сопоставить значения с другим значением В pandas? - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь заменить некоторые числа в массиве numpy на 1 или 0 с помощью функции numpy .where, однако я могу делать это только по одному. Например, когда я распечатываю `` единицы '', он заменяет только значения, превышающие 3,8845, на 1, но другие значения, которые меньше 3,8845, по-прежнему остаются такими же, я хочу, чтобы значения меньше 3,8845 были тоже изменился на 0, но я не знаю, как это сделать. Дайте мне знать, если вы знаете решение.

import numpy as np
import pandas as pd

happiness_2019 = pd.read_csv('2019.csv')
df = pd.DataFrame(happiness_2019,columns=['Score']).to_numpy()
ones = np.where(df>3.8845,1,df)
zeros = np.where(df<3.8845,0,df)
zeros

Ответы [ 3 ]

1 голос
/ 17 июня 2020
# generate dummy data
df = pd.DataFrame({'Score':np.random.rand(10)*10})

# convert to 0,1:
df['Score'] = (df['Score']>3.8845).astype(int)

Как это работает:

df['Score']>3.8845 - это логическое выражение, которое оценивается как pd.Series из True и False, в зависимости от того, где выполняется условие.

.astype(int) преобразует True в 1 и False в 0, поэтому мы получаем pd.Series нулей и единиц

0 голосов
/ 17 июня 2020

Вы можете использовать apply, затем с помощью лямбда-функции вы можете проверить и добавить либо 1, либо 0.

df['Score'].apply(lambda x: 1 if (x>yourvalue) else 0)

0 голосов
/ 17 июня 2020

Попробуйте использовать эту технику

ones = df>3.8845
zeros = df<3.8845

После этого вы можете изучить преобразование логического фрейма данных в единицы и 0 примерно так:

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