David Jay Brady
David Jay Brady

Reputation: 1154

Replace part of df column with values defined in Series/dictionary

I have a column in a DataFrame that often has repeat indexes. Some indexes have exceptions and need to be changed based on another Series I've made, while the rest of the indices are fine as is. The Series indices are unique.

Here's a couple variables to illustrate

df = pd.DataFrame(data={'hi':[1, 2, 3, 4, 5, 6, 7]}, index=[1, 1, 1, 2, 2, 3, 4])
Out[52]: 
   hi
1   1
1   2
1   3
2   4
2   5
3   6
4   7

exceptions = pd.Series(data=[90, 95], index=[2, 4])
Out[36]: 
2    90
4    95

I would like to do set the df to ...

   hi
1   1
1   2
1   3
2  90
2  90
3   6
4  95

What's a clean way to do this? I'm a bit new to Pandas, my thoughts are just to loop but I don't think that's the proper way to solve this

Upvotes: 1

Views: 25

Answers (1)

Henry Ecker
Henry Ecker

Reputation: 35636

Assuming that the index in exceptions is guaranteed to be a subset of df indexes we can use loc and the Series.index to assign the values:

df.loc[exceptions.index, 'hi'] = exceptions

We can use index.intersection if we have extra values in exceptions that does not or should not align in df:

exceptions = pd.Series(data=[90, 95, 100], index=[2, 4, 5])
df.loc[exceptions.index.intersection(df.index, sort=False), 'hi'] = exceptions

df:

   hi
1   1
1   2
1   3
2  90
2  90
3   6
4  95

Upvotes: 1

Related Questions