【问题标题】:How do I replace all of Column A's values with Column B's values unless Column B's value is NaN? [duplicate]除非 B 列的值为 NaN,否则如何将 A 列的所有值替换为 B 列的值? [复制]
【发布时间】:2019-08-27 13:47:50
【问题描述】:

给定以下数据框:

import numpy as np
import pandas as pd

df = pd.DataFrame({"ColA": [1, 2, np.nan, 4, np.nan],
                   "ColB": [np.nan, 7, np.nan, 9, 10]})

   ColA  ColB
0   1.0   NaN
1   2.0   7.0
2   NaN   NaN
3   4.0   9.0
4   NaN  10.0

我想用 ColB 的值替换 ColA 的值,但我不想用 NaN 值替换非 NaN 值。我想要的输出是以下 DataFrame:

   ColA  ColB
0   1.0   NaN
1   7.0   7.0
2   NaN   NaN
3   9.0   9.0
4   10.0  10.0

我的实际数据非常大,所以虽然我知道我可以逐行迭代,但我正在寻找一种更有效的方法。

【问题讨论】:

  • 这可能会有所帮助:stackoverflow.com/questions/38152389/…
  • 看不到简单的fillna 在这里有什么帮助(关于欺骗)
  • 该问题与stackoverflow.com/questions/30357276/… 不重复。我不仅要填充 NaN 值,还要用另一列中的值替换一列中的所有值,除非另一列中的值是 NaN。
  • 使用numpy.where()。我无法回答,因为它已被标记为重复呵呵。
  • 是的,它是重复的。已经回答了。你也可以选择df['ColA'] = df.ColB.combine_first(df.ColA)

标签: python pandas numpy


【解决方案1】:
df['ColA']= np.where(df['ColA'].notna(), np.where(df['ColB'].isna(),df['ColA'],df['ColB']), df['ColA'])

【讨论】:

  • 谢谢!这个小小的修改就成功了: df['ColA']= np.where(df['ColA'].notna(), np.where(df['ColB'].isna(), df['ColA'] , df['ColB']), df['ColB'])
猜你喜欢
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 2018-06-18
  • 2020-02-12
  • 1970-01-01
  • 2020-08-23
  • 2021-06-10
  • 1970-01-01
相关资源
最近更新 更多