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

时间:2019-01-08 11:25:35

标签: python string pandas dataframe

所以我有一个包含多列的数据框,我想尝试找出“ 已链接.. ”列中的值是否在名为“ 新名称”,如果是,则应以“ cell.value-是”的方式设置特定的单元格值;否则,应以“ cell.value-否”的方式设置

create prozedure hochdrei
(declare @ x int)
declare @x int
begin
set @x = 3
print power(@x, 3)
return x
end

所以预期结果应该如下表;

import pandas as pd

d = {'New Names': ['a,b,c','a','c,d,e,f','a'], 'Linked Letter 0': 
['a','b','c','d'],
'Linked Letter 1': ['c','s','v','None'],
'Linked Letter 2': ['None','None','d','s']}

df_new = pd.DataFrame(data=d)

df_new


      Index   New Names   Linked Letter 0   Linked Letter 1   Linked Letter 2  
     ------- ----------- ----------------- ----------------- ----------------- 
        0       a,b,c       a                 c                 None             
        1       a           b                 s                 None             
        2       c,d,e,f     c                 v                 d                
        3       a           d                 None              s      

以下提供的解决方案存在一个问题:

问题是映射到YES和NO到值有时无法按预期工作。例如,即使新名称列中的值在两行中相同,但最后获得YES的相同值在下一行中也将获得NO。

您为什么认为会发生这种情况?

1 个答案:

答案 0 :(得分:2)

您可以使用pd.DataFrame.filter来过滤Linked列,使用列表理解来构造布尔数组,最后使用locnp.where来创建条件逻辑:

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