2 回答
TA贡献1836条经验 获得超13个赞
我解释您的问题的方式是填充所有与例如0[0, 0, 0, 0]匹配的 DataFrame 行,在您的情况下,这只是一行,但是对于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]
我们得到了想要的 DataFrame:
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
TA贡献1805条经验 获得超10个赞
为什么不只是
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.]])
添加回答
举报