使用 .loc 使用另一列的值更新 pandas 列

update pandas column with another column's values using .loc

如果 ColX 的值 != 0,我需要有条件地更新下面的 ColY。与其他示例的不同之处在于,我需要将 ColY 替换为 ColX 的值,而不是字符串

当我使用以下代码时,我可以使用 .loc 替换为字符串:

df1.loc[df1.ColX != 0, 'ColY'] = 'Example'

如何用 ColX 的值替换相关的 ColY 值?我试过下面的东西都无济于事

df1.loc[df1.ColX != 0, 'ColY'] = df1.ColX

我的原始数据框 df1 是:

ID  ColX   ColY
A   2024   0
B   0      2023
C   2019   0
D   2023   2024

我想要的输出是:

ID  ColX   ColY
A   2024   2024
B   0      2023
C   2019   2019
D   2023   2023

df1.loc[df1.ColX != 0, 'ColY'] = df1.ColX 的问题是您试图用整个 df1.ColX 替换 df1.ColY 的一个子集(即 df1.ColX != 0),它有更多值。

要有条件地复制正确的值,您还必须将相同的过滤器应用于 df1.ColX:

df1 = pd.DataFrame(data=[[2024, 0], [0, 2023], [2019, 0], [2023, 2023],], columns=['ColX', 'ColY'])

relevant_cols = (df1.ColX != 0)
df1.loc[relevant_cols, 'ColY'] = df1.loc[relevant_cols, 'ColX']
df1
#   ColX  ColY
# 0  2024  2024
# 1     0  2023
# 2  2019  2019
# 3  2023  2023

为了您的方便,我认为这是另一个 cleaner 方法,使用 np.where and .ne:

df['ColY'] = np.where(df['ColX'].ne(0), df['ColX'], df['ColY'])

print(df)
  ID  ColX  ColY
0  A  2024  2024
1  B     0  2023
2  C  2019  2019
3  D  2023  2023