Построение определенных баров в серии и группировка остальных в одном баре - PullRequest
1 голос
/ 04 октября 2019

Представьте, что у меня есть ряд со столбцом, который имеет различные значения, такие как:

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

И я хочу использовать matplotlib.pyplot для построения гистограммы, которая будет отображать числовые значения A, B, C и другие, появляющиеся в серии. Мне удалось сделать это без группировки «других», просто выполнив это:

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

или

plt.bar(srs.index, srs)

И я знаю, что это показывает все гистограммы, как мне ограничить этопросто показывать бары для A, B, C и ДРУГИХ?

Ответы [ 2 ]

2 голосов
/ 04 октября 2019

Вы можете сделать map, затем 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()

Выход:

enter image description here

0 голосов
/ 04 октября 2019

Вам необходимо создать новый фрейм данных и построить его впоследствии

# 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...