I wonder how to replace the string value of 'Singapore' in location1 column with the string values from location2 column. In this case, they're Tokyo, Boston, Toronto and Hong Kong, Boston.
import pandas as pd
data = {'location1':["London, Paris", "Singapore", "London, New York", "Singapore", "Boston"],
'location2':["London, Paris", "Tokyo, Boston, Toronto", "London, New York", "Hong Kong, Boston", "Boston"]}
df = pd.DataFrame(data)
location1 location2
0 London, Paris London, Paris
1 Singapore Tokyo, Boston, Toronto
2 London, New York London, New York
3 Singapore Hong Kong, Boston
4 Boston Boston
CodePudding user response:
Simply, use .loc and indexing:
df.loc[df['location1'].eq('Singapore'), 'location1'] = df['location2']
print(df)
# Output:
location1 location2
0 London, Paris London, Paris
1 Tokyo, Boston, Toronto Tokyo, Boston, Toronto
2 London, New York London, New York
3 Hong Kong, Boston Hong Kong, Boston
4 Boston Boston
CodePudding user response:
We can do it using the numpy.where method :
>>> import numpy as np
>>> df["location1"] = np.where(df["location1"] == 'Singapore', df["location2"], df["location1"])
>>> df
location1 location2
0 London, Paris London, Paris
1 Tokyo, Boston, Toronto Tokyo, Boston, Toronto
2 London, New York London, New York
3 Hong Kong, Boston Hong Kong, Boston
4 Boston Boston
CodePudding user response:
Try:
df['location1'] = df['location1'].mask(df['location1'] == 'Singapore')\
.fillna(df['location2'])
Output:
location1 location2
0 London, Paris London, Paris
1 Tokyo, Boston, Toronto Tokyo, Boston, Toronto
2 London, New York London, New York
3 Hong Kong, Boston Hong Kong, Boston
4 Boston Boston
