python - 填写 na 作为数据框的过滤器

标签 python pandas dataframe fillna

我有一个类似于下面的数据框:

     col1    col2    col3    col4
0    101     1000    NaN     NaN
1    102     2000    51      1500
2    103     2500    52      2800
3    104     3600    53      NaN
4    105     2400    NaN     NaN
5    106     3600    54      NaN
6    107     1200    55      1800
7    108     1000    NaN     NaN
8    NaN     NaN     56      1200

现在,我需要用 col2 中的相应值填充 col4 中的 na 值。因此,如果 col4 为 NaN,则从 col2 获取值并将其放入 col4。

但是,这里的问题是只有当 col3 具有某些值时我才需要执行此操作。 (过滤后的数据框)

如果我必须填充 NaN 值而不考虑过滤器,那么以下内容将起作用:

df['col4'].fillna(0) # If I need to fill all NaN with zero values
df['col4'].fillna(df['col2']) # if I need to fill the corresponding col2 values in place of NaN

但是,如何才能只将过滤后的数据填充到 na 中呢?

在上面的示例中,只有第 3 行和第 5 行(对应于 col3 值 53 和 54)应填充 col2 中的值(3600 和 3600)。而第 0、5 和 7 行的 col4 应保持 NaN。

这不起作用,因为过滤后的列表将是整个列的子集。

df[df['col3'].notnull()]['col4'].fillna(df['col2'],inplace=True) #will not work

由于数据集超过 200 万行,我们有什么方法可以在不循环的情况下完成此操作?

最佳答案

尝试通过 notna() 并创建一个 bool 掩码:

cond=df['col3'].notna()

最后使用 loc 访问器和 fillna() 有条件地传递掩码和填充值:

df.loc[cond,'col4']=df.loc[cond,'col4'].fillna(df.loc[cond,'col2'])

关于python - 填写 na 作为数据框的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67932666/

相关文章:

python - 旋转 - TransformOriginPoint - PyQt4

python - 有条件地替换 NaN

python - Pandas :在一系列可用值之前/之后估算给定数量的缺失值

python - 有效地迭代 pandas 行

python - 具有多个 groupby 的 pandas pivot 数据框

r - 在 R 中向后搜索向量/数据表

python - 使用 pandas 进行高效的成对计算

Python CSV 阅读器从 line_num 开始

python - 如何仅将列中的数值相乘

python - 如何使用geojson和shapely确定一个点是否在多边形内部