python - 如何使用带有 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”?
解决方案
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
>>>
推荐阅读
- jquery - 在 iFrame 中查找图像,均具有生成的 ID
- powerbi - 如何使用 DAX 查找具有相同 ID 的 2 个或多个元素的值之间的差异
- visual-studio-code - 在 vs 代码中包装多行注释
- javascript - JQuery preventDefault 不会停止页面重新加载
- python - 近似小于或等于的可微张量运算?
- algorithm - 有没有办法在分区的 spark 数据集上并行运行操作?
- tensorflow-estimator - 如何将 RMSE 添加到预制估计器中
- python - Opencv:仅在捕获图像时才由零组成的 Numpy 数组
- mongodb - 如何修复 mongo 中的 SSL 错误“CSSMERR_TP_VERIFY_ACTION_FAILED”?
- loops - 如何遍历包含多个数字的行的文本文件,同时计算数字