Очевидно, вы прочитали свой DataFrame из текстового файла, например, CSV, но с разделителем, отличным от запятой.
Выполните df.info()
, и я предполагаю, что вы получили результат, подобный приведенному ниже:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9 entries, 0 to 8
Data columns (total 4 columns):
Date 9 non-null object
Product 9 non-null object
Price 9 non-null object
Discount 9 non-null int64
dtypes: int64(1), object(3)
Обратите внимание, что Дата , Продукт и Цена имеют столбцы объект (фактически, строка ) ). Это замечание особенно важно в случае столбца Цена , поскольку для вычисления означает исходный столбец должен иметь значение число (не строка).
Итак, сначала вы должны преобразовать столбцы Date и Price в соответствующие типы ( datetime и float ). Для этого выполните:
df.Date = pd.to_datetime(df.Date)
df.Price = df.Price.str.replace(',', '.').astype(float)
Запустите df.info()
еще раз, и теперь результат должен быть:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9 entries, 0 to 8
Data columns (total 4 columns):
Date 9 non-null datetime64[ns]
Product 9 non-null object
Price 9 non-null float64
Discount 9 non-null int64
dtypes: datetime64[ns](1), float64(1), int64(1), object(1)
И теперь вы можете вычислить среднюю скидку, выполнив:
df.groupby('Date').Discount.mean()
Для ваших данных я получил:
Date
2020-01-01 20.666667
2020-01-02 25.333333
2020-01-03 30.666667
Name: Discount, dtype: float64
Обратите внимание, что ваш пример кода содержит следующие ошибки:
- Аргумент groupby является имя столбца (или список имен столбцов), поэтому:
df
между скобками не требуется, - вместо time вы должны написать Date (у вас нет время столбец).
- Ваш Скидка столбец записывается, начиная с прописной D .