我有一个数据框
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 :(
答案 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