有两个数据帧 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
-------------------------------------------
通过 pandas 执行此操作的最有效方法是什么?我尝试了很多方法,例如合并两个 df,但找不到方法可以比较整行以在 df B 中查找。
最佳答案
我会用dfA
逗号分隔。派生 Depend
列的 list
。派生 dfB
列表。使用sets
比较列表
,并使用np.where (condition, True if Condition, False if condition)
。这里的条件是列表
之间的公共(public)长度应等于4
或超过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
关于python - 使用 pandas 查找另一个 df 中一行的所有单元格,如果全部存在则返回标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63769147/