在Python中将字典键映射到数据帧值
我有一个矩阵,如图所示:在Python中将字典键映射到数据帧值,python,dictionary,Python,Dictionary,我有一个矩阵,如图所示: X = t r v a 4 7 3 b 0 1 8 c 0 7 9 d 9 6 0 e 1 3 4 f 8 7 2 g 5 7 4 h 5 1 0 i 9 8 6 j 4 6 7 我有一个键值对字典,如下所示: Y = {'t': 5, 'r': 4, 'v': 2} 我试图将Y的值映射到矩阵X的每一列,这样,如果Y中的值大于或等
X =
t r v
a 4 7 3
b 0 1 8
c 0 7 9
d 9 6 0
e 1 3 4
f 8 7 2
g 5 7 4
h 5 1 0
i 9 8 6
j 4 6 7
我有一个键值对字典,如下所示:
Y = {'t': 5, 'r': 4, 'v': 2}
我试图将Y的值映射到矩阵X的每一列,这样,如果Y中的值大于或等于X中的值,我们得到“1”,否则得到“0”
对于ex:在上述代码中,输出应为:
Z=[011001011111000111111111111011011]
在这种情况下,对于第一行,X中的't'=4<'t'=5;'r'=7>r'=4;'v'=3>“v'=2,我们得到011,依此类推。
我通过了,但没有得到一个解决方案,我正在寻找。TIA.通过以下方式将强制转换掩码用于整数:
如果要输出列表
首先转换为str
,然后将加入
每一行:
L = df.ge(Y).astype(int).astype(str).apply(''.join, axis=1).tolist()
print (L)
['011', '001', '011', '110', '001', '111', '111', '100', '111', '011']
或新列Z
:
df['Z'] = df.ge(Y).astype(int).astype(str).apply(''.join, axis=1)
print (df)
t r v Z
a 4 7 3 011
b 0 1 8 001
c 0 7 9 011
d 9 6 0 110
e 1 3 4 001
f 8 7 2 111
g 5 7 4 111
h 5 1 0 100
i 9 8 6 111
j 4 6 7 011
详情:
print (df.ge(Y))
t r v
a False True True
b False False True
c False True True
d True True False
e False False True
f True True True
g True True True
h True False False
i True True True
j False True True
在熊猫中使用
zip
和列提取
键=[“t”、“r”、“v”]
ans=zip(*[np.array(X[key]>=y[key])表示键入键]
这将为您提供所需的输出,但数据类型将为
bool
,可转换为int
,感谢此解决方案。为了得到这个列表,我一直在与各种循环作斗争。无论如何,当我在web应用程序(Jupyter笔记本)上使用它时,这个解决方案是有效的,但当我通过终端执行代码时,它返回所有零矩阵。我不知道这是什么原因。我知道,数字是否保存为字符串?通过打印检查(df.applymap(type))是。在应用连接操作和转换到列表之前,它是字符串。因此,首先将字符串转换为int,df=df.astype(int).ge(Y)。astype(int)应该可以工作。这很好。我感觉到df=df.astype(int).ge(10).astype(int)工作得非常好,但是对于字典元素Y,它给出的是零。
print (df.ge(Y))
t r v
a False True True
b False False True
c False True True
d True True False
e False False True
f True True True
g True True True
h True False False
i True True True
j False True True