Как я могу отобразить значения в панде DataFrame? - PullRequest
0 голосов
/ 01 марта 2019
import numpy as np
import pandas as pd


Y = pd.DataFrame(np.array([1, 3, 4, 0, 1]))

print(Y)

Y[Y[0]] = np.array(0, 0, 0, 0)
Y[Y[1]] = np.array(1, 0, 0, 0)
Y[Y[2]] = np.array(1, 1, 0, 0)
Y[Y[3]] = np.array(1, 1, 1, 0)
Y[Y[4]] = np.array(1, 1, 1, 1)

print(Y)

Это то, что я делаю.Я пытаюсь получить в качестве вывода:

[[1 0 0 0], [1 1 1 0], [1 1 1 1], [0 0 0 0], [1 0 0 0]]

Однако вместо этого я получаю ошибку:

    Y[Y[0]] = np.array(0, 0, 0, 0)
ValueError: only 2 non-keyword arguments accepted

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

То, как я интерпретирую ваш вопрос, состоит в том, чтобы заполнить ВСЕ строки DataFrame, которые соответствуют, например, 0, [0, 0, 0, 0], что в вашем случае - только одна строка, но для 1на самом деле две строки, которые должны быть заменены.

Я перешел на использование букв вместо цифр, чтобы было легче видеть:

# Initialize DataFrame with zeros:
Y = pd.DataFrame(np.zeros((5,4), dtype=int), index=list('bdeab'))

Сейчас:

print(Y)

дает:

   0  1  2  3
b  0  0  0  0
d  0  0  0  0
e  0  0  0  0
a  0  0  0  0
b  0  0  0  0

Если мы теперь сделаем:

mapping = {
    'a': [0, 0, 0, 0],
    'b': [1, 0, 0, 0],
    'c': [1, 1, 0, 0],
    'd': [1, 1, 1, 0],
    'e': [1, 1, 1, 1]
}

for row in pd.unique(Y.index):
    Y.loc[row, :] = mapping[row]

Получим желаемый фрейм данных:

   0  1  2  3
b  1  0  0  0
d  1  1  1  0
e  1  1  1  1
a  0  0  0  0
b  1  0  0  0
0 голосов
/ 01 марта 2019

Почему не просто

yourary=pd.DataFrame([np.ones(x) for x in Y[0]]).fillna(0).values
yourary

Out[63]: 
array([[1., 0., 0., 0.],
       [1., 1., 1., 0.],
       [1., 1., 1., 1.],
       [0., 0., 0., 0.],
       [1., 0., 0., 0.]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...