如何将Pandas中的非零条目转换为带有列表的dict?

问题描述 投票:2回答:1

假设我现在有一个面具

mask = df.DataFrame([[0, 0, 1], [1, 1, 0], [0, 0, 1]])

实际上,qazxsw poi是

mask

此外,我有一个像分数矩阵

    0  1  2
0   0  0  1
1   1  1  0
2   0  0  1

score = df.DataFrame([[0.5, 0.3, 0.2], [0.1, 0.9, 0.7], [0.5, 0.4, 0.8]])

我只想在 0 1 2 0 0.5 0.3 0.2 1 0.1 0.9 0.7 2 0.5 0.4 0.8 中保留score的条目与“true”,即结果应该是

mask

最后,我需要将结果转换为带有列表的dict

    0    1    2
0   0    0    0.2
1   0.1  0.9  0
2   0    0    0.8

我怎么能以Pythonic的方式做?谢谢!

python pandas
1个回答
1
投票

使用result = {0: {2: 0.2}, 1: {0: 0.1, 1: 0.9}, 2: {2: 0.8}} 与铸造DataFrame.where掩码布尔值:

0,1

然后转换为字典并删除嵌套字典中的print (score.where(mask.astype(bool), 0)) 0 1 2 0 0.0 0.0 0.2 1 0.1 0.9 0.0 2 0.0 0.0 0.8 值:

0

d = score.where(mask.astype(bool), 0).to_dict(orient='index') d = {k:{k1:v1 for k1, v1 in v.items() if v1 != 0} for k, v in d.items()} print (d) {0: {2: 0.2}, 1: {0: 0.1, 1: 0.9}, 2: {2: 0.8}} 重塑的另一个想法,并将不匹配的值替换为DataFrame.stack

NaN

推荐问答