首页 > 解决方案 > 如何使用带有 pandas 的 lambda 函数迭代数组

问题描述

我有以下数据集:

     0    1     2   
0   2.0  2.0    4   
0   1.0  1.0    2   
0   1.0  1.0    3   
3   1.0  1.0    5   
4   1.0  1.0    2   
5   1.0  NaN    1   
6   NaN  1.0    1   

我想要做的是插入一个遍历每一行的新列,如果有 NaN,则给它一个 0,如果没有,则从列 '2' 复制值以获得此值:

     0    1     2   3
0   2.0  2.0    4   4
0   1.0  1.0    2   2
0   1.0  1.0    3   3
3   1.0  1.0    5   5
4   1.0  1.0    2   2
5   1.0  NaN    1   0
6   NaN  1.0    1   0

以下代码是我到目前为止所拥有的,它工作正常,但不会迭代列“2”的值。

df.isna().sum(axis=1).apply(lambda x: df[2].iloc[x] if x==0 else 0)

如果我使用 df.iloc[x] 我得到

0    4
1    4
2    4
3    4
4    4
5    0
6    0

如何迭代列“2”?

标签: pythonpandasdataframepandas-apply

解决方案


np.where使用withisna和尝试以下代码any

>>> df['3'] = np.where(df[['0', '1']].isna().any(1), 0, df['2'])
>>> df
     0    1  2  3
0  2.0  2.0  4  4
0  1.0  1.0  2  2
0  1.0  1.0  3  3
3  1.0  1.0  5  5
4  1.0  1.0  2  2
5  1.0  NaN  1  0
6  NaN  1.0  1  0
>>> 

推荐阅读