猿问

如何在 Pandas DataFrame 中映射值?

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

我究竟做错了什么?


白猪掌柜的
浏览 210回答 2
2回答

开心每一天1111

我解释您的问题的方式是填充所有与例如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  3b  0  0  0  0d  0  0  0  0e  0  0  0  0a  0  0  0  0b  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  3b  1  0  0  0d  1  1  1  0e  1  1  1  1a  0  0  0  0b  1  0  0  0

holdtom

为什么不只是yourary=pd.DataFrame([np.ones(x) for x in Y[0]]).fillna(0).valuesyouraryOut[63]: array([[1., 0., 0., 0.],       [1., 1., 1., 0.],       [1., 1., 1., 1.],       [0., 0., 0., 0.],       [1., 0., 0., 0.]])
随时随地看视频慕课网APP

相关分类

Python
我要回答