python - 根据 Pandas DataFrame 中的值将行值复制到相邻列

标签 python pandas

我有一个 pandas DataFrame,有两列,A 和 B,其中包含数值或 NaN。如果一列中出现数值,则另一列中的相应单元格将始终为 NaN,例如:

    A    B
0  123  NaN
1  456  NaN
2  NaN  789

我想复制(或者移动)A 列中的任何非 NaN 值以覆盖 B 列中相应的 NaN,例如:

    A    B
0  123  123
1  456  456
2  NaN  789

基于 this reply 我提出的类似问题:

mask = (df['A'] != np.nan)&(df['B'] == np.nan)
df['B'][mask] = df['A'][mask]

但这不会导致任何变化。谁能解释一下我哪里出错了?

最佳答案

您可以使用 combine_firstfillna :

df.B = df.B.combine_first(df.A)
print (df)
       A      B
0  123.0  123.0
1  456.0  456.0
2    NaN  789.0

或者:

df.B = df.B.fillna(df.A)
print (df)
       A      B
0  123.0  123.0
1  456.0  456.0
2    NaN  789.0

Anf 如果在将强制转换替换为 intB 中没有 NaN 值:

df.B = df.B.fillna(df.A).astype(int)
print (df)
       A    B
0  123.0  123
1  456.0  456
2    NaN  789

关于python - 根据 Pandas DataFrame 中的值将行值复制到相邻列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42132746/

相关文章:

python - 如何理解 Yahoo! 的原始 HTML使用 Python 检索数据时的财务状况?

Python Pandas figsize 未定义

python - 在 Python 中选择长度为 n 的随机列表元素

python - Dataframe:如何为每一行选择不同的列

python - 迭代数据框仅返回列标题

python - Django 设置文件中的 Django 错误 - TypeError : expected str, 字节或 os.PathLike 对象,而不是元组

python - 为什么 Popen.stdout 只包含部分输出?

python - 条件下的 DataFrameGroupBy diff()

python - 通过多索引列切片谓词过滤 DataFrame 中的行

Python Pandas 如何使 pct_change() 计算单个数字而不是先前数字的变化?