熊猫:检查一列中是否存在值,创建一个新列,是否存在,如果不添加0,则添加1

时间:2019-11-23 06:25:54

标签: python pandas numpy dataframe

我有一个数据框

df = columnA=[1,2,3,4,5,6]
     columnB=['Apple AA','Banana BB',NaN,'Strawberry DD',NaN,'Blueberry EE']

如果columnB包含值,我想创建一个新列

df = columnA=[1,2,3,4,5,6]
     columnB=['Apple AA','Banana BB',NaN,'Strawberry DD',NaN,'Blueberry EE']
     columnC=[1,1,0,1,0,1]

我的代码:

df[columnC] = df[columnB].map(lambda x: 1 if len(x) > 0 else 0 if len(x) == 0)

columnC = np.repeat(0, df.shape[0]
for i in df:
   if len(df[columnB]) > 0:
      df[columnC] = 1

Both not work :(

3 个答案:

答案 0 :(得分:2)

您可以使用.notnull()来测试您的值是否不是NaN

import pandas as pd
import numpy as np
df = pd.DataFrame({'columnA':[1,2,3,4,5,6],
                   'columnB':['Apple AA','Banana BB',np.NaN,'Strawberry DD',np.NaN,'Blueberry EE']})

df['columnC'] = df['columnB'].notnull()*1

乘以1用于将布尔值转换为二进制值。 另外请注意不要忘记列名周围的引号。

答案 1 :(得分:1)

代码如下:

df = pd.DataFrame({'A': [1,2,3,4,5,6], 'B': ['Apple', 'Ba', np.nan, 'St', np.nan, 'e']})

df['C'] = df['B'].isna()

 A      B      C
0  1  Apple  False
1  2     Ba  False
2  3    NaN   True
3  4     St  False
4  5    NaN   True
5  6      e  False

然后将布尔值转换为0 1

df['C'] = df['C'].apply(lambda x: 1 if not x else 0)


   A      B  C
0  1  Apple  1
1  2     Ba  1
2  3    NaN  0
3  4     St  1
4  5    NaN  0
5  6      e  1

答案 2 :(得分:1)

您能否使用numpy中的np.where来尝试关注。

df['C']=np.where(df['B'].notnull(),1,0)

输出如下。

        A           B       C
1   Apple           AA      1
2   Banana          BB      1
3   NaN             None    0
4   Strawberry      DD      1
5   NaN             None    0
6   Blueberry       EE      1