I need to conditionally update ColY below if the value for ColX != 0. The difference to other examples is that I need ColY to be replaced by the values from ColX, as opposed to a string
I can replace with a string using .loc when I use the following code:
df1.loc[df1.ColX != 0, 'ColY'] = 'Example'
How can I replace the relevant ColY values with the values from ColX? I have tried things such as the below to no avail
df1.loc[df1.ColX != 0, 'ColY'] = df1.ColX
My original dataframe, df1, is:
ID ColX ColY
A 2024 0
B 0 2023
C 2019 0
D 2023 2024
My desired output is:
ID ColX ColY
A 2024 2024
B 0 2023
C 2019 2019
D 2023 2023
The problem with df1.loc[df1.ColX != 0, 'ColY'] = df1.ColX
is that you're trying to replace a subset of df1.ColY
(ie where df1.ColX != 0
) with the entire df1.ColX
, which has more values.
To copy the correct values conditionally, you also have to apply the same filter to 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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.