首页 > 解决方案 > 创建新列,在插入之前检查其他列

问题描述

我有一个 df,我想插入一个检查 ColA、ColB 和 ColC 的新列。新列将具有值“是”,除非其中任何一个具有上述列的相应值(在字典中提供)。我如何在python中实现这一点?

import pandas as pd 
import numpy as np

to_check= {'ColA':'Yes', 'ColB':'Y','ColC':'True'}

df = pd.DataFrame(
    {
            'ID': ['AB01', 'AB02', 'AB03', 'AB04', 'AB05','AB06','AB07','AB08'],
            'ColA': ["Yes","No",np.nan,"No",
                     "Yes", "","", "No"],
            'ColB': ["N","","Y","",
                     "Y", np.nan,"", "N"],
            'ColC': [np.nan,"True","False",np.nan,"False",
                     "True", "",""],
            'Type': [85,98,84,70,50,np.nan,85,74] 
    }
)

最终结果应该是这样的,新列名为“结果”,我必须在代码中使用字典:
在此处输入图像描述

标签: pythonpandasdataframenumpydata-manipulation

解决方案


如果没有any行与字典值匹配,则可以使用:

c = df[to_check.keys()].eq(to_check).any(1)
df['Result'] = np.where(c,'','Yes')

print(df)

     ID ColA ColB   ColC  Type Result
0  AB01  Yes    N    NaN  85.0       
1  AB02   No        True  98.0       
2  AB03  NaN    Y  False  84.0       
3  AB04   No         NaN  70.0    Yes
4  AB05  Yes    Y  False  50.0       
5  AB06       NaN   True   NaN       
6  AB07                   85.0    Yes
7  AB08   No    N         74.0    Yes

推荐阅读