python - 如果另一列是 NaN,如何替换列中的值?

标签 python pandas

所以这应该是地球上最简单的事情了。伪代码:

Replace column C with NaN if column E is NaN

我知道我可以通过拉出 E 列为 NaN 的所有数据帧行,替换所有 C 列,然后将其合并到原始数据集来做到这一点,但这对于一个简单的操作来说似乎需要大量工作。为什么这不起作用:

示例数据:

dfz = pd.DataFrame({'A' : [1,0,0,1,0,0],
               'B' : [1,0,0,1,0,1],
               'C' : [1,0,0,1,3,1],
               'D' : [1,0,0,1,0,0],
               'E' : [22.0,15.0,None,10.,None,557.0]})

替换函数:

def NaNfunc(dfz):
  if dfz['E'] == None:
    return None
  else:
    return dfz['C']

dfz['C'] = dfz.apply(NaNfunc, axis=1)

如何在一行中做到这一点?

最佳答案

使用np.where:

In [34]:
dfz['C'] = np.where(dfz['E'].isnull(), dfz['E'], dfz['C'])
dfz

Out[34]:
   A  B   C  D    E
0  1  1   1  1   22
1  0  0   0  0   15
2  0  0 NaN  0  NaN
3  1  1   1  1   10
4  0  0 NaN  0  NaN
5  0  1   1  0  557

或者简单地屏蔽 df:

In [38]:
dfz.loc[dfz['E'].isnull(), 'C'] = dfz['E']
dfz

Out[38]:
   A  B   C  D    E
0  1  1   1  1   22
1  0  0   0  0   15
2  0  0 NaN  0  NaN
3  1  1   1  1   10
4  0  0 NaN  0  NaN
5  0  1   1  0  557

关于python - 如果另一列是 NaN,如何替换列中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36095363/

相关文章:

python - 将日期时间格式转换为采样时间

python - 为 QGIS 2 空间连接创建空间索引 (PyQGIS)

python - 根据特定标准选择线路

python - 使用 matplotlib 的绘图上的颜色条件数据引发了循环

python - conda环境下在Raspberry Pi 4上安装pandas时出错

python - Pandas 数据帧 : Reduce Diagonal Sub-Frame to Single Row or How to Fill a Dataframe Piece by Piece

python - 逐周、逐日和逐年获取

python - Django:几何图形的存储方式是什么?

python - 结果的矩阵形式表示

python - 如何使用数据框中一列的 < 或 > 然后使用同一日期的另一列数据?