Как сгруппировать, найти среднее значение и построить график в python

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

id | year  | sales
1  | 2010  |200
2  | 2010  |300
3  | 2011  |500
4  | 2011  |600
5  | 2012  |300
6  | 2012  |200

Я хотел бы найти средние значения за разные годы и построить график за три года.

Я пробовал приведенный ниже код, но не работает:

    df.groupby(['year','sales']).count()['sales'].unstack().plot(ax=ax).show()

Есть какая-то ошибка?

jezrael 10.09.2018 10:05

попробуйте это ... дает средние значения .... groupby ('year'). apply (lambda x: sum (x ['sales']) / len (x ['sales'])). plot ()

iamklaus 10.09.2018 10:28
0
2
77
2

Ответы 2

Я считаю, что нужно добавить sales после groupby, при необходимости добавить fill_value=0 в unstack для замены NaN на 0:

df.groupby(['year','sales'])['sales'].mean().unstack(fill_value=0).plot()

это вызывает эту ошибку ValueError: not enough values to unpack (expected 2, got 1)

KMarto 10.09.2018 10:10

@KMarto - Что такое print (df.info())?

jezrael 10.09.2018 10:11
<class 'pandas.core.frame.DataFrame'> RangeIndex: 6435 entries, 0 to 6434 Data columns (total 5 columns): Store 6435 non-null int64 Date 6435 non-null object Weekly_Sales 6435 non-null float64 year 6435 non-null int64 sales 6435 non-null float64 dtypes: float64(2), int64(2), object(1) memory usage: 226.3+ KB None @jezrael
KMarto 10.09.2018 10:14

@KMarto - Если заменить df.groupby(['year','sales'])['sales'].count() на df.groupby(['year','sales'])size(), он заработает?

jezrael 10.09.2018 10:16

Не вызывает никаких ошибок, просто ждет и заканчивается, ничего не показывая

KMarto 10.09.2018 10:20

Если проверить df1 = df.groupby(['year','sales'])['sales'].count() to df.groupby(['year','sales']).size().unstack(fill_value=0, он вернет DataFrame?

jezrael 10.09.2018 10:22

Позвольте нам продолжить обсуждение в чате.

KMarto 10.09.2018 10:30

Попробуй это:

df[["year","sales"]].groupby("year").mean().plot()

Вы могли случайно включить id в набор данных.

Другие вопросы по теме