Pandas DataFrame - Как создать стек графа с накоплением (matplotlib) - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь преобразовать данные в DataFrame pandas в график с накоплением, но не могу получить их в стеке.

Данные в формате

index | datetime (yyyy/mm/dd) | name | weight_change

Каждый день измеряется по 6 разных людей.

Я хочу, чтобы на графике с накоплением отображался weight_change (y) за дату (x), но с weight_change для каждого из 6 человек, расположенных друг над другом

Самое близкое, к чему я смог добраться, это:

df = df.groupby['datetime', 'name'], as_index=False).agg({'weight_change': 'sum'})
agg = df.groupby('datetime').sum()
agg.plot.area()

Это дает график площади для совокупности значений weight_change (сумма каждого лица weight_change для каждого дня), но я могуНе представляю, как разделить это для каждого человека, например, на разные значения:

enter image description here

Я пробовал разные вещи без удачи.Есть идеи?

1 Ответ

0 голосов
/ 05 июня 2018

Упрощенная версия ваших данных:

df = pd.DataFrame(dict(days=range(4)*2,
                       change=np.random.rand(8)*2.,
                       name=['John',]*4 + ['Jane',]*4))

df:

    change  days    name
0   0.238336    0   John
1   0.293901    1   John
2   0.818119    2   John
3   1.567114    3   John
4   1.295725    0   Jane
5   0.592008    1   Jane
6   0.674388    2   Jane
7   1.763043    3   Jane

Теперь мы можем просто использовать pyplot '* stackplot:

import matplotlib.pyplot as plt

days = df.days[df.name == 'John']
plt.stackplot(days, df.change[df.name == 'John'],
              df.change[df.name == 'Jane'])

Создает следующий график:

enter image description here

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