'pandas copy value from one column to another if condition is met
I have a dataframe:
df =
col1 col2 col3
1 2 3
1 4 6
3 7 2
I want to edit df
, such that when the value of col1 is smaller than 2 , take the value from col3
.
So I will get:
new_df =
col1 col2 col3
3 2 3
6 4 6
3 7 2
I tried to use assign
and df.loc
but it didn't work.
What is the best way to do so?
Solution 1:[1]
df['col1'] = df.apply(lambda x: x['col3'] if x['col1'] < x['col2'] else x['col1'], axis=1)
Solution 2:[2]
The most eficient way is by using the loc
operator:
mask = df["col1"] < df["col2"]
df.loc[mask, "col1"] = df.loc[mask, "col3"]
Solution 3:[3]
df.loc[df["col1"] < 2, "col1"] = df["col3"]
Solution 4:[4]
As mentioned by @anky_91 use np.where
to update the 'col1'
values:
df['col1'] = np.where(df['col1'] < df['col2'], df['col3'], df['col1'])
Solution 5:[5]
You could look at using the apply function.
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html
df['col1'] = df.apply(lambda c: c['col3'] if c['col1'] < 2 else c['col1'], axis=1)
Edit: Sorry, I see from your mock outcome you are referring to col2 rather than an int of 2. Eric Yang's answer will solve your problem.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | |
Solution 3 | mkk |
Solution 4 | |
Solution 5 |