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
我在做什么错了?
答案 0 :(得分:2)
为什么不只是
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.]])
答案 1 :(得分:2)
我对您的问题的解释方式是,将与0
匹配的所有DataFrame行填充为[0,0,0,0],在您的情况下,该行仅是一行,但对于{{1 }},实际上应该替换两行。
我已改为使用字母代替数字,以便于查看:
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
我们获得了所需的DataFrame:
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]