Панды GroupBy готовит каждую группу - PullRequest
0 голосов
/ 18 января 2019

У меня есть некоторые данные, из которых я хочу извлечь временной ряд доходов (сумма Dollars в разные даты Day в разных местах Where) для разных продуктов (x и y).

import pandas as pd

#Create data
data = {'Day': [1,1,2,2,3,3],
        'Where': ['A','B','A','B','B','B'],
        'What': ['x','y','x','x','x','y'],
        'Dollars': [100,200,100,100,100,200]}

index = range(len(data['Day']))

columns = ['Day','Where','What','Dollars']


df = pd.DataFrame(data,  index=index, columns=columns)
df

ddd

Для этого я группирую данные по Day и What и суммирую по Dollars:

#Group by Day and What and sum Dollars (for each Where)
print(df.groupby(['Day', 'What'])['Dollars'].sum())

ccc

Теперь я бы хотел сделать временные ряды для x и y примерно так:

iii

Я попробовал следующее, но оно явно не работает:

items = df.What.unique()

ax = plt.figure()
for item in items:
    df_tmp = df[['Day']][df.What == item]
    plt.plot(df_tmp['Day'],df_tmp,'.-',label=item)

fff

Может кто-нибудь, пожалуйста, направить меня в правильном направлении? Есть ли более быстрый способ получить правильный результат?

1 Ответ

0 голосов
/ 18 января 2019

IIUC, unstack и участок:

(df.groupby(['Day', 'What'])['Dollars']
   .sum()
   .unstack('What', fill_value=0)
   .plot())
plt.show()

enter image description here

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