为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Pandas DataFrame 中映射值?

如何在 Pandas DataFrame 中映射值?

白猪掌柜的 2021-11-23 16:50:40
import numpy as npimport pandas as pdY = 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 回答

?
开心每一天1111

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


查看完整回答
反对 回复 2021-11-23
?
holdtom

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.]])


查看完整回答
反对 回复 2021-11-23
  • 2 回答
  • 0 关注
  • 209 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信