0

如果 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
4

2 回答 2

2

只是为了您的方便,我认为这是另一种更清洁的方法,使用np.whereand .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
于 2019-04-03T15:19:22.817 回答
1

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

要有条件地复制正确的值,您还必须将相同的过滤器应用于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
于 2019-04-03T15:15:45.113 回答