Python 检查Columns值是否在一个特定的列中
因此,我有一个数据帧,它有多个列,我想尝试找出我的“链接..”列中的值是否在名为“新名称”的列中,如果是,则应以“cell.value-Yes”或“cell.value-No”的方式设置特定单元格值 因此,预期结果如下表所示Python 检查Columns值是否在一个特定的列中,python,string,pandas,dataframe,Python,String,Pandas,Dataframe,因此,我有一个数据帧,它有多个列,我想尝试找出我的“链接..”列中的值是否在名为“新名称”的列中,如果是,则应以“cell.value-Yes”或“cell.value-No”的方式设置特定单元格值 因此,预期结果如下表所示 Index New Names Linked Letter 0 Linked Letter 1 Linked Letter 2 ------- ----------- ----------------- -----------------
Index New Names Linked Letter 0 Linked Letter 1 Linked Letter 2
------- ----------- ----------------- ----------------- -----------------
0 a,b,c a - YES c - YES None
1 a b - NO s - NO None
2 c,d,e,f c - YES v - NO d - YES
3 a d - NO None s - NO
下面提供的解决方案有一个问题:
问题在于,将“是”和“否”映射到值有时无法按预期工作。例如,即使“新名称”列中的值在两行中都相同,但在末尾得到“是”的同一个值在下一行中也可以得到“否”
您认为为什么会出现这种情况?您可以使用来过滤链接的列,使用列表理解来构造布尔数组,最后使用以下内容作为条件逻辑:
df = pd.DataFrame(data=d)
for col in df.filter(like='Linked'):
bools = [link in new_names for link, new_names in zip(df[col], df['New Names'])]
df.loc[df[col] != 'None', col] += pd.Series(np.where(bools, ' - YES', ' - NO'))
print(df)
Linked Letter 0 Linked Letter 1 Linked Letter 2 New Names
0 a - YES c - YES None a,b,c
1 b - NO s - NO None a
2 c - YES v - NO d - YES c,d,e,f
3 d - NO None s - NO a
尽管它可以正常工作,但是在某些情况下,布尔数组填充了错误的标记(是,否),甚至完全相同的值也会发生这种情况。例如,在某些行中,您在“新名称”列中找到一个项目并附加“是”值,而对于不同行中的同一项目,它附加“否”,即使该值为新名称column@iSerd,对不起,我不懂。您想使用与我建议的解决方案不兼容的数据吗?Hi@jpp,我刚刚用我的问题更新了条目,谢谢您的支持consideration@iSerd,对不起,我的意思是更改您的输入,给出一个,即我的逻辑不起作用的输入。它与您提供的输入一起工作。事实上,如果我尝试自己重新构建数据,那么您的解决方案会工作,但是我需要在获得我在问题中提供的此版本之前处理数据,我无法共享实际数据(机密),所以我相信它一定与数据类型问题或其他相关(我已经检查了数据类型,其中我有错误的是和否映射)-您认为这里还有其他可能的问题吗?因为这太奇怪了,有时有效,有时无效
df = pd.DataFrame(data=d)
for col in df.filter(like='Linked'):
bools = [link in new_names for link, new_names in zip(df[col], df['New Names'])]
df.loc[df[col] != 'None', col] += pd.Series(np.where(bools, ' - YES', ' - NO'))
print(df)
Linked Letter 0 Linked Letter 1 Linked Letter 2 New Names
0 a - YES c - YES None a,b,c
1 b - NO s - NO None a
2 c - YES v - NO d - YES c,d,e,f
3 d - NO None s - NO a