pandas将两列与空值组合在一起

vag*_*ond 17 python dataframe pandas nonetype

我有一个带有两列的df,我想要将两个列组合在一起,忽略NaN值.问题是,有时两列都有NaN值,在这种情况下我希望新列也有NaN.这是一个例子:

df = pd.DataFrame({'foodstuff':['apple-martini', 'apple-pie', None, None, None], 'type':[None, None, 'strawberry-tart', 'dessert', None]})

df
Out[10]:
foodstuff   type
0   apple-martini   None
1   apple-pie   None
2   None    strawberry-tart
3   None    dessert
4   None    None
Run Code Online (Sandbox Code Playgroud)

我试着用fillna它来解决这个问题:

df['foodstuff'].fillna('') + df['type'].fillna('')
Run Code Online (Sandbox Code Playgroud)

我得到了:

0      apple-martini
1          apple-pie
2    strawberry-tart
3            dessert
4                   
dtype: object
Run Code Online (Sandbox Code Playgroud)

第4行已成为空白值.在这种情况下我不想要的是NaN值,因为两个组合列都是NaN.

0      apple-martini
1          apple-pie
2    strawberry-tart
3            dessert
4            None       
dtype: object
Run Code Online (Sandbox Code Playgroud)

roo*_*oot 35

使用fillna上的填充值是另一列一列:

df['foodstuff'].fillna(df['type'])
Run Code Online (Sandbox Code Playgroud)

结果输出:

0      apple-martini
1          apple-pie
2    strawberry-tart
3            dessert
4               None
Run Code Online (Sandbox Code Playgroud)


sir*_*rfz 6

您可以使用该combine方法lambda

df['foodstuff'].combine(df['type'], lambda a, b: ((a or "") + (b or "")) or None, None)
Run Code Online (Sandbox Code Playgroud)

(a or "")""如果 a 是,None则返回相同的逻辑应用于串联(None如果串联是空字符串,则结果将是)。