Заказ участка разворота по графу за каждую неделю - PullRequest
0 голосов
/ 22 марта 2019

При построении набора данных ниже:

date = ['2/18/2019','2/18/2019','2/18/2019','2/18/2019','2/25/2019','2/25/2019','2/25/2019','2/25/2019','3/4/2019','3/4/2019','3/4/2019','3/4/2019',
        '3/11/2019','3/11/2019','3/11/2019','3/11/2019','3/18/2019','3/18/2019','3/18/2019','3/18/2019']
name = ['P','L','E','N','P','L','E','N','P','L','E','N','P','L','E','N','P','L','E','N']
count = [0,0,0,0,0,0,0,0,1,5,0,0,1,7,1,2,2,7,1,2]
df = pd.DataFrame({'date': date, 'name': name, 'count':count}).sort_values(['date','count'],ascending=[True, False])

Я хотел бы поддерживать порядок каждую неделю, т.е.в течение каждой недели значения должны быть упорядочены по количеству, например, 3/18 у нас должен быть сначала L, затем либо P, либо N, а затем E.

Однако, порядок разворачивается после поворота, и при построении графика он показываетданные в алфавитном порядке.Есть ли способ заставить его строить график за каждую неделю?

piv = df.pivot(index='date', columns='name', values='count')
piv = piv.reset_index(level=piv.index.names)
piv.plot(kind='bar', stacked=True, rot=0, grid=True)

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Порядок столбцов - это порядок расположения столбцов.Если в вашей сводной таблице есть E, L, N, P, это будет порядок ряда (текущий код).Вы можете изменить этот порядок, но все бары будут иметь одинаковый порядок.Вот пример упорядочения баров по количеству буквенных групп (т.е. E = 2)

piv = df.pivot(index='date', columns='name', values='count')
piv = piv.reset_index(level=piv.index.names)
cols = ["date"] + piv[list("ELPN")].sum().sort_values(ascending=False).keys().tolist()
piv = piv[cols]
piv.plot(kind='bar', stacked=True, rot=0, grid=True)

enter image description here

enter image description here

Я подозреваю, что вы хотите различный порядок для каждого бара.Я не верю, что это возможно с Pandas, но, вероятно, это можно сделать напрямую с помощью matplotlib.

0 голосов
/ 22 марта 2019

Вы можете отсортировать данные по оси 1, а затем построить график.

df.pivot(index = 'date', columns='name', values='count')\
.sort_values(by='2019-03-18', ascending=False, axis=1)\
.plot.bar(stacked = True, grid = True)

enter image description here

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