Это может показаться повторяющимся вопросом, но это не потому, что я искал и искал, а только получил сложное решение, которое не применимо к моей ситуации. У меня есть данные 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()
попробуйте это ... дает средние значения .... groupby ('year'). apply (lambda x: sum (x ['sales']) / len (x ['sales'])). plot ()
Я считаю, что нужно добавить 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 - Что такое print (df.info())
?
<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 - Если заменить df.groupby(['year','sales'])['sales'].count()
на df.groupby(['year','sales'])size()
, он заработает?
Не вызывает никаких ошибок, просто ждет и заканчивается, ничего не показывая
Если проверить df1 = df.groupby(['year','sales'])['sales'].count() to df.groupby(['year','sales']).size().unstack(fill_value=0
, он вернет DataFrame?
Позвольте нам продолжить обсуждение в чате.
Попробуй это:
df[["year","sales"]].groupby("year").mean().plot()
Вы могли случайно включить id в набор данных.
Есть какая-то ошибка?