python - 在另一个df中查找一行的所有单元格,如果所有单元格都存在,则返回标志使用pandas
问题描述
有两个数据帧 A 和 B,df A 如下所示,包括主节点及其对每个节点的依赖:
NODE Depend
===== =============================
T1234 T1235 T1236 T1237 T1238
-------------------------------------
B1234 B1235 B1236 B1237 B1238
-------------------------------------
N1234 N1235 N1236 N1237 N1238
-------------------------------------
我想从 df B 中的 df A 中查找每一行,以了解它们在 df B 中是否都可用。
Node
=====
T1234
T1235
T1236
T1237
T1238
B1234
B1235
B1238
N1234
N1237
如果一行中的所有单元格(包括 df A 的主节点)在 df B 中可用,则返回 True 标志,否则在 df A 中返回 False 作为新列,如下所示:
NODE Depend flag
===== ============================= =====
T1234 T1235 T1236 T1237 T1238 T
-------------------------------------------
B1234 B1235 B1236 B1237 B1238 F
-------------------------------------------
N1234 N1235 N1236 N1237 N1238 F
-------------------------------------------
通过熊猫做到这一点的最有效方法是什么?我尝试了很多方法,例如合并两个 df,但发现无法将整行与 df B 中的查找进行比较。
解决方案
我会用dfA
逗号分隔。导出list
列。导出Depend
列表dfB
。比较lists
使用sets
和使用np.where (condition, True if Condition, False if condition)
。这里的条件是 之间的共同长度lists
应该等于four
或超过3
。
print(dfA)#Separated by comma
NODE Depend
0 T1234 T1235,T1236,T1237,T1238
1 B1234 B1235,B1236,B1237,B1238
2 N1234 N1235,N1236,N1237,N1238
s=list(dfB.Node.values.tolist())#dfB into a list
dfA.Depend=dfA.Depend.str.split(',')#dfA.Depend into a list
dfA['flag']=np.where(dfA.Depend.apply(lambda x:len([*{*x}&{*s}])>3), 'T','F')
print(dfA)
NODE Depend flag
0 T1234 [T1235, T1236, T1237, T1238] T
1 B1234 [B1235, B1236, B1237, B1238] F
2 N1234 [N1235, N1236, N1237, N1238] F
推荐阅读
- php - PHP 函数的返回和回显工作方式不同。为什么?
- spring - Nginx HTTPS->HTTP 在 Spring 中出现 403“需要 SSL”错误
- django - Django:如何获取与登录用户相关的所有数据
- git - 我们如何在 Azure DevOps 构建管道中读取 GIT 提交消息?
- laravel - POST:来自 Laravel 中 Messenger Bot 的 500 内部服务器错误
- python - OpenCV RBG2HSV 转换与 float32 图像的差异
- bash - 如何在bash中提取不同的文件名变体
- google-cloud-platform - 迁移 Google Cloud Platform 网络服务器虚拟实例(从一个帐户到另一个帐户)
- java - 尝试在 Spring Boot 中配置从 Secrets Manager 读取并引发区域错误
- sql - 单词和文本结尾之间的正则表达式