herrypotter
herrypotter

Reputation: 95

Plotting certain bars in a series and groupnig the rest in one bar

Imagine I have the series with the column that has various different values such as:

COL1    FREQUENCY
A       30
B       20
C       50
D       10
E       15
F       5

And I want to use matplotlib.pyplot to plot a bar graph that would display the number values A, B, C, and OTHERS, appearing in the series. I managed to do so without the 'others' grouping by simply doing this:

ax = srs.plot.bar(rot=0)

or

plt.bar(srs.index, srs)

And I know it shows all bar plots, how do I limit this to just show bars for A, B, C, and OTHERS?

Upvotes: 1

Views: 41

Answers (2)

Quang Hoang
Quang Hoang

Reputation: 150765

You can do a map then groupby.sum():

s = df['COL1'].map(lambda x: x if x in ('A','B','C') else 'OTHERS')
to_plot = df.FREQUENCY.groupby(s).sum()
to_plot.plot.bar()

Output:

enter image description here

Upvotes: 2

fmarm
fmarm

Reputation: 4284

You need to create a new dataframe and plot it afterwards

# list all values you want to keep
col1_to_keep = ['A','B','C']
# create a new dataframe with only these values in COL1
srs2 = srs.loc[srs['COL1'].isin(col1_to_keep)]
# create a third dataframe with only what you dont want to keep
srs3 = srs.loc[~srs['COL1'].isin(col1_to_keep)]
# create a dataframe with only one row containing the sum of frequency
rest = pd.DataFrame({'COL1':["OTHER"],'FREQUENCY': srs3['FREQUENCY'].sum()})
# add this row to srs2
srs2 =srs2.append(rest)
# you can finally plot it
ax = srs2.plot.bar(rot=0)

Upvotes: 0

Related Questions