Как отобразить два разных объекта при их подсчете?

#pandas #matplotlib #plot #graph #data-visualization

#панды #matplotlib #сюжет #График #визуализация данных

Вопрос:

Предположим, у меня есть фрейм данных, подобный этому:

 *Age* *RemoteWork*
18  Sometimes
24  Never
30  Sometimes
15  Never
24  Sometimes
 

и так продолжается и дальше.

Как бы я построил график, например, «который показывает, СКОЛЬКО 24-летних людей находится в группе Never»?

Предположим, что существует больше возрастов и значений удаленной работы. По сути, я пытаюсь создать гистограмму возраста, которая показывает ценность и количество удаленной работы.

Мне жаль, если это не очень понятно. Если вам нужна дополнительная информация, пожалуйста, скажите мне.

Комментарии:

1. pd.crosstab(df['Age'], df['RemoteWork']).plot.bar()

2. Это тоже отлично работает, принял бы это, если бы вы опубликовали в качестве ответа. В любом случае спасибо.

Ответ №1:

Очевидно, что ваш образец набора данных ограничен и не имеет дополнительных атрибутов. Вам действительно нужно подумать о том, как вы хотите визуализировать, тогда все будет просто. Использование matplotlib в двух примерах.

  1. разброс, в котором есть факторизованная ось y (не требуется только для демонстрации)
  2. столбик с возрастом, разделяющий возрастные диапазоны
 import matplotlib.pyplot as plt

df = pd.read_csv(io.StringIO("""*Age* *RemoteWork*
18  Sometimes
24  Never
30  Sometimes
15  Never
24  Sometimes"""), sep="s ")


fig, ax = plt.subplots(1,2, figsize=[10,5],
                      sharey=False, sharex=False, gridspec_kw={"hspace":0.3})

(df
 .assign(a=lambda dfa: ((dfa["*Age*"]//10)*10).astype(str) "-" (((dfa["*Age*"]//10)*10) 9).astype(str))
 .groupby(["a","*RemoteWork*"])
 .agg("count")
 .unstack(0)
 .droplevel([0], axis=1)
 .plot(ax=ax[1],kind="bar", stacked=True)
)
ax[1].set_xlabel("Stacked", weight='bold', fontsize=12)


(df
 .assign(y=lambda dfa: pd.factorize(dfa["*RemoteWork*"])[0])
 .plot(ax=ax[0],kind="scatter", x="*Age*", y="y", c="*Age*", s="*Age*", colormap="jet")
)
ax[0].set_xlabel("Scatter", weight='bold', fontsize=12)

 

введите описание изображения здесь