python-3.x - 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
,b1
和c1
都是NaN
s。
第 1 行和第 2 行:我想x1
用 in 中的任何内容填充列,仅当且x
仅当 columnsa1
和是s 时。第 3、4、5 和 6 行:当来自和的任何一或两列是s时,我希望该列保持原样。b1
c1
NaN
x1
a1
b1
c1
NaN
有没有一种有效的方法来做这个操作?
我已经尝试过这个和这个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,)
解决方案
推荐阅读
- c - 有没有办法将未知类型的数组作为参数传递给 C 中的函数?
- android - React Native:使用 `pop()` 或 `goBack()` 时的性能问题,导致无限循环。但是使用`reset`很好
- regex - 删除除模式和下一行 vim 之外的所有内容
- python-3.x - 为 Open AI GymTaxi 环境保存视频/GIF 文件
- laravel - 新的 Laravel 构建 - 发布请求超时
- sql - 如何修复'System.IndexOutOfRangeException:'位置 0 处没有行。' 错误?
- c# - Xamarin.Android 如何使“wav”文件成为应用程序的默认推送通知声音?
- python - 如何通过 selenium 和 python 从下拉菜单中选择元素?
- scala - 丢弃身份验证器时,如何解决与剪影 scala 库的不一致问题?
- amazon-web-services - 在ecs aws中运行terraform destroy时,它会先删除一个服务,然后需要很长时间才能删除任务