Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查Columns值是否在一个特定的列中_Python_String_Pandas_Dataframe - Fatal编程技术网

Python 检查Columns值是否在一个特定的列中

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 ------- ----------- ----------------- -----------------

因此,我有一个数据帧,它有多个列,我想尝试找出我的“链接..”列中的值是否在名为“新名称”的列中,如果是,则应以“cell.value-Yes”或“cell.value-No”的方式设置特定单元格值

因此,预期结果如下表所示

    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