Python 如何将Pandas中的非零条目转换为dict with list?
假设现在我有一个面具Python 如何将Pandas中的非零条目转换为dict with list?,python,pandas,Python,Pandas,假设现在我有一个面具 mask=df.DataFrame([[0,0,1],[1,1,0],[0,0,1]] 实际上,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]) 即 我只想保留mask中带有“true”的score条目,即结果应为 0 1 2 0 0
mask=df.DataFrame([[0,0,1],[1,1,0],[0,0,1]]
实际上,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])
即
我只想保留mask
中带有“true”的score
条目,即结果应为
0 1 2
0 0 0 0.2
1 0.1 0.9 0
2 0 0 0.8
最后,我需要使用如下列表将结果转换为dict
result = {0: {2: 0.2}, 1: {0: 0.1, 1: 0.9}, 2: {2: 0.8}}
我怎么能用蟒蛇的方式来做呢?谢谢大家! 用于将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}}
另一个想法是将不匹配的值改形并替换为NaN
:
s = score.where(mask.astype(bool)).stack()
d = {level: s.xs(level).to_dict() for level in s.index.levels[0]}
print (d)
{0: {2: 0.2}, 1: {0: 0.1, 1: 0.9}, 2: {2: 0.8}}
s = score.where(mask.astype(bool)).stack()
d = {level: s.xs(level).to_dict() for level in s.index.levels[0]}
print (d)
{0: {2: 0.2}, 1: {0: 0.1, 1: 0.9}, 2: {2: 0.8}}