Как создать сгруппированный барплот из кадра данных, сгруппированного по двум столбцам с интервалами - PullRequest
1 голос
/ 30 июня 2019

Я сгруппировал данные по двум столбцам ('a' и 'b'). И для каждого столбца я разрезал его на урны. Для каждой скрещенной корзины я хотел бы получить сумму 'c'. Затем я хочу создать сгруппированный сюжет на сумму 'c'. Однако, когда я использую .plot(kind='bar') после сгруппированных данных, столбцы не были сгруппированы вместе.

grouped = df.groupby([pd.cut(df['a'], [0, 1, 2, 3]), pd.cut(df['b'], [0, 101, 300, 500])])
grouped = grouped.c.sum()
grouped.plot(kind='bar')

несгруппированный барплот

Я бы хотел, чтобы график был сгруппирован по 'a' с другим цветом, обозначающим 'b'. Я пытался .unstack().plot(kind='bar'); однако, это возвращает ошибку:

не может определить следующую метку для типа

1 Ответ

0 голосов
/ 30 июня 2019

Учитывая следующие данные примера

df = pd.DataFrame({'a': [8, 49, 81, 52, 22, 24, 32, 67, 24, 21, 78, 16, 86, 19, 4, 88, 4, 20, 20, 1],
                   'b': [2, 49, 49, 70, 31, 47, 98, 26, 55, 36, 17, 39, 56, 80, 52, 36, 42, 69, 73, 70],
                   'c': [22, 99, 31, 95, 16, 32, 81, 20, 58, 23, 53, 5, 0, 81, 8, 68, 16, 36, 35, 54]})

и ваши настройки

grouped = df.groupby([pd.cut(df['a'], [16, 30, 67, 86]),
                      pd.cut(df['b'], [0, 26, 49, 100])])
grouped = grouped['c'].sum()

у вас есть два варианта

  • (grouped.reset_index()
            .pivot('a', 'b')
            .plot(kind='bar'));
    

    enter image description here

  • grouped = grouped.unstack()
    grouped.columns = grouped.columns.categories
    grouped.plot(kind='bar');
    

    enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...