A maneira mais eficiente de converter valores de coluna no Pandas DataFrame
Eu tenho um pd.DataFrame que se parece com:
Eu quero criar um ponto de corte nos valores para colocá-los em dígitos binários, meu ponto de corte neste caso é0.85
. Quero que o quadro de dados resultante tenha a seguinte aparência:
O script que escrevi para fazer isso é fácil de entender, mas para conjuntos de dados grandes é ineficiente. Tenho certeza de que o Pandas tem alguma maneira de cuidar desses tipos de transformações.
Alguém sabe de uma maneira eficiente de converter uma coluna de carros alegóricos em uma coluna de números inteiros usando um limite?
Minha maneira extremamente ingênua de fazer uma coisa dessas:
DF_test = pd.DataFrame(np.array([list("abcde"),list("pqrst"),[0.12,0.23,0.93,0.86,0.33]]).T,columns=["c1","c2","value"])
DF_want = pd.DataFrame(np.array([list("abcde"),list("pqrst"),[0,0,1,1,0]]).T,columns=["c1","c2","value"])
threshold = 0.85
#Empty dataframe to append rows
DF_naive = pd.DataFrame()
for i in range(DF_test.shape[0]):
#Get first 2 columns
first2cols = list(DF_test.ix[i][:-1])
#Check if value is greater than threshold
binary_value = [int((bool(float(DF_test.ix[i][-1]) > threshold)))]
#Create series object
SR_row = pd.Series( first2cols + binary_value,name=i)
#Add to empty dataframe container
DF_naive = DF_naive.append(SR_row)
#Relabel columns
DF_naive.columns = DF_test.columns
DF_naive.head()
#the sample DF_want