首页 > 解决方案 > Pandas - 仅当 MULTIPLE COLUMNs 为空时,才用另一列的值填充一列

问题描述

我有一个像这样的 Pandas DataFrame:

   a      b    c      x    a1     b1     c1     x1
0  aa    ba   ca      9    NaN    NaN    NaN    1
1  ab    bb   cb      9    NaN    NaN    NaN    NaN
2  ac    bc   cd    NaN    NaN    NaN    NaN    NaN
3  ad    bd   cd      9    1      NaN    NaN    NaN
4  ae    be   ce      9    NaN    2      NaN    12
5  af    bf   cf      9    NaN    NaN    3      14
6  ag    bg   cg      9    3      NaN    1      45

我想要做:

   a      b    c      x    a1     b1     c1     x1
0  aa    ba   ca      9    NaN    NaN    NaN    1
1  ab    bb   cb      9    NaN    NaN    NaN    9
2  ac    bc   cc    NaN    NaN    NaN    NaN    NaN
3  ad    bd   cd      9    1      NaN    NaN    NaN
4  ae    be   ce      9    NaN    2      NaN    12
5  af    bf   cf      9    NaN    NaN    3      14
6  ag    bg   cg      9    3      NaN    1      45

解释:

第 0 行:我不希望发生替换,当 中已经有一个值时x1,即使所有a1,b1c1都是NaNs。
第 1 行和第 2 行:我想x1用 in 中的任何内容填充列,仅当且x仅当 columnsa1和是s 时。第 3、4、5 和 6 行:当来自和的任何一或两列是s时,我希望该列保持原样。b1c1NaN
x1a1b1c1NaN

有没有一种有效的方法来做这个操作?


我已经尝试过这个这个stackoverflow的答案,但是我得到了广播错误,大概是因为我试图对多个列进行检查。

这是我尝试过的:

np.where(np.isnan(df[['a1', 'b1', 'c1']].values), df['x'].values, df['x1'].values)

和我的错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-32-bb6a0f9faf18> in <module>
----> 1 np.where(np.isnan(df[['a', 'b', 'c']].values), df['x'].values, df['x1'].values)

<__array_function__ internals> in where(*args, **kwargs)

ValueError: operands could not be broadcast together with shapes (176213,6) (176213,) (176213,) 

标签: python-3.xpandasdataframedata-analysisdata-cleaning

解决方案



推荐阅读