python - 如果组成它的元组的任何项目不在数据框中,则删除字典键
问题描述
我有一个 dict 和一个 df,如下所示:
import networkx as nx
import pandas as pd
import scipy.spatial.distance as ssd
import numpy as np
dict_edge = {(1,2): {'Duration': 1.17, 'Numcalls':4},
(3,2): {'Duration': 1.27, 'Numcalls':3},
(3,4): {'Duration': 1.3, 'Numcalls':2}}
df = pd.DataFrame({'SJDR': [0,0,0,1],
'TR': [0,0,2,1],
'LD': [1,3,0,0]})
我需要在 中添加另一个项目dict_edge.values()
,为此我使用以下迭代:
for key, value in zip(dict_edge.keys(), dict_edge.values()):
x = df.loc[key[0]].to_numpy()
y = df.loc[key[1]].to_numpy()
cosine = 1 - ssd.cosine(x,y)
value['Cosine_Similarity'] = cosine
但是,由于数据帧没有索引值为 4,我得到了关键错误。所以,我需要做的是检查构成dict_edge
键的所有元组的所有项目是否都在df
数据帧索引中。否则,我想删除整个项目(键和值),引用不在数据框中的元组项键。在此过滤之后,所需的 dict_edge 将如下所示:
dict_edge = {(1,2): {'Duration': 1.17, 'Numcalls':4},
(3,2): {'Duration': 1.27, 'Numcalls':3}}
任何人都可以帮忙吗?
解决方案
您可以检查所有键是否都在索引中:
for key, value in zip(dict_edge.keys(), dict_edge.values()):
if pd.Series(key).isin(df.index).all():
x = df.loc[key[0]].values
y = df.loc[key[1]].values
cosine = 1 - ssd.cosine(x,y)
value['Cosine_Similarity'] = cosine
else:
value['Cosine_Similarity'] = np.NaN
推荐阅读
- python - TypeError:传入 *args 时参数有多个值
- javascript - 在新的 _blank 选项卡上异步设置 location.href 在 MS Edge 上不起作用
- r - 为闪亮的 Web 应用程序运行 UI 时出错 - 'closure' 类型的对象不是子集
- java - 无法在 Spring Boot 多模块应用程序中的 JUnit 4 测试中自动装配服务
- python - 如何清理此数据类型对象并将其转换为浮点类型
- java - OpenGL / LWJGL如何在移动相机时将对象保持在屏幕中间
- c++ - 如何检测屏幕分辨率何时发生变化?
- python - 如何在 Flask 应用程序中对 HTML 表格进行排序?
- c# - Windows 窗体 - 此上下文中不存在名称“dataGridView2”
- python - Python计算值小于1的位数