Reputation: 35
So, I'm a beginner to Pandas and I'm having a little trouble getting something to work.
My task is that I was given a dataframe as follows:
AnimalID | Pet Name | Pet Type |
---|---|---|
1 | Whiskers | Cat |
2 | Charlie | Dog |
3 | Spot | Dog |
4 | Honey | Cat |
What I'm attempting to do is add a '+' symbol to the end of the ID if the pet type is a dog.
My solution was to iterate through each row using iterrows() and check if the Pet Type Matches, and if it does, change the ID in that row. My code is below:
import pandas as pd
#df = pd.read_excel('AnimalList.xlsx')
df = pd.DataFrame({'AnimalID':[1,2,3,4], 'Pet Name':['Whiskers', 'Charlie', 'Spot', 'Honey'], 'Pet Type':['Cat', 'Dog', 'Dog', 'Cat']})
for row in df.iterrows():
if row['Pet Type'].eq('Dog').any():
row['AnimalID'] = df['AnimalID'].astype(str) + '+'
df
The dataframe is printing without error, but is there any reason that nothing is changing? I have to be missing something obvious. Thank you.
Upvotes: 1
Views: 3427
Reputation: 11650
here is one way to do it using mask
# when condition is true, add + to the ID
df['AnimalID']=(df['AnimalID'].mask(df['Pet Type'].eq('Dog'),
df['AnimalID'].astype(str) + ('+')))
df
AnimalID Pet Name Pet Type
0 1 Whiskers Cat
1 2+ Charlie Dog
2 3+ Spot Dog
3 4 Honey Cat
Upvotes: 2
Reputation: 14064
You can apply Series.where
to column AnimalID
. Its values will be replaced where the condition is False
, so we will need to check Series.ne
to add +
for each row where this column equals Dog
.
df['AnimalID'] = df['AnimalID'].where(df['Pet Type'].ne('Dog'),
df['AnimalID'].astype(str) + '+')
print(df)
AnimalID Pet Name Pet Type
0 1 Whiskers Cat
1 2+ Charlie Dog
2 3+ Spot Dog
3 4 Honey Cat
Upvotes: 2