简体   繁体   中英

How to replace the values of a column with another column in pandas dataframe given a condition

I have a pandas dataframe:

Col 1 Col 2
0 4
2 5
0 2
0 1
5 7
0 5

I want to replace Col 1 values with corresponding Col 2 values. But it should replace the value only if Col 1 value = 0. And once the column values is replaced the value that was replaced should get zero. Basically I want to swap the values.

Desired output should be:

Col 1 Col 2
4 0
2 5
2 0
1 0
5 7
5 0

Please help with the code.

Use boolean indexing :

# identify rows to swap 
m = df['Col 1'].eq(0)

# swap values
df.loc[m, ['Col 1', 'Col 2']] = df.loc[m, ['Col 2', 'Col 1']].to_numpy()

Updated DataFrame:

   Col 1  Col 2
0      4      0
1      2      5
2      2      0
3      1      0
4      5      7
5      5      0
df['Col 1']=df.apply(lambda row: row['Col 2'] if row['Col 1']==0 else row['Col 1'],axis=1)
df
Out[255]: 
   Col 1  Col 2
0     4     4
1     2     5
2     2     2
3     1     1
4     5     7
5     5     5

You can use mask :

# Columns to swap on condition
cols = ['Col 1', 'Col 2']
cond = df['Col 1'] == 0

df[cols] = df[cols].mask(cond, other=df[cols[::-1]].to_numpy())

Output:

Col 1 Col 2
4 0
2 5
2 0
1 0
5 7
5 0

We can swap values between two columns by using Numpy where.

# Importing Modules
import pandas as pd
import numpy as np

# Creating DataFrame
df = pd.DataFrame({'col1': [0, 2, 0, 0, 5, 0], 'col2':[4, 5, 2, 1, 7, 5]})

# Swaping values between two columns based on the condition
df['col1'],df['col2']=np.where(df['col1']==0,(df['col2'],df['col1']),(df['col1'],df['col2']))

Final Output

   col1 col2
0   4   0
1   2   5
2   2   0
3   1   0
4   5   7
5   5   0

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM