python - 使用 Pandas 检查列值是否位于某一特定列中

标签 python string pandas dataframe

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

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      

所以预期结果应如下表;

    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    

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

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

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

最佳答案

您可以使用pd.DataFrame.filter过滤您的 Linked 列,使用列表理解构建 bool 数组,最后 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

关于python - 使用 Pandas 检查列值是否位于某一特定列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54090823/

相关文章:

python - 保存 Spark 模型摘要

python - 错误 : not all arguments converted during bytes formatting

r - 将具有相似名称 R 的级别组合在一起

python - 如何通过在 Pandas 时间序列数据框中搜索数据来添加新列

python - Pandas : groupby ffill for multiple columns

python - Pandas Dataframe 列到 python 列表

python - Flask 模板 - For 循环迭代键 :value

python - Yellowbrick Visualiser.fit() 引发 ValueError

java - 从字符串 S 的每个位置提取整数

string - 如何查看映射键是否包含某些字符串?