2016-10-07 5 views
0

У меня есть столбец положительных и отрицательных чисел, и я хочу преобразовать его в список 0s и 1s. Если число положительное, оно должно быть заменено на 1. Если число отрицательное или 0, оно должно быть заменено на 0. Как я могу это сделать?Преобразование значений столбца данных в pandas pandas на месте

Например, в R, я хотел бы сделать:

list = ifelse(list > 0, 1, 0) 

ответ

1

Вы можете вернуть boolean значения и использовать astype(int), чтобы преобразовать их в 1 и 0.

print((df['A'] > 0).astype(int)) 

Пример:

df = pd.DataFrame({'A': [1,-1,2,-2,3,-3]}) 
print(df) 
A 
0 1 
1 -1 
2 2 
3 -2 
4 3 
5 -3 
print((df['A'] > 0).astype(int)) 
0 1 
1 0 
2 1 
3 0 
4 1 
5 0 
0

вы можете использовать индексатор и .loc для изменения значений таких имеет

indexer = df[df['col']>0].index 
df.loc[indexer] = 1 

    indexer_2 = df[df['col']<0].index 
    df.loc[indexer_2] = 0 

или вы можете посмотреть на numpy.where такой имеет

import numpy as np 
import pandas as pd 
pd.DataFrame(np.where(df>0,1,0),index=df.index) 
0

Вы можете использовать DataFrame.apply применить функцию к каждой строке вашего DataFrame. Например:

import numpy as np 
import pandas as pd 
df = pd.DataFrame({'A': [1, -2, 3, -4]}) 
df['A'] = df.apply(lambda row:np.where(row['A'] > 0, 1, 0), axis=1) 

lambda функция может быть заменена любой функции (не обязательно должна быть lambda), и axis=1 должен применить функцию к каждой строке, а не в каждой колонке.

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html