Загрузка данных


data = {
    'date': ['2026-04-01','2026-04-02','2026-04-03','2026-04-04','2026-04-05',
             '2026-04-06','2026-04-07','2026-04-08','2026-04-09','2026-04-10'],
    'category': ['Еда','Транспорт','Еда','Развлечения','Связь',
                 'Еда','Транспорт','Еда','Развлечения','Еда'],
    'amount': [12, 3, 15, 20, 5, 10, 4, 18, 25, 14],
    'payment': ['карта','наличные','карта','карта','карта',
                'наличные','карта','карта','наличные','карта']
}

df_my = pd.DataFrame(data)

df_my['date'] = pd.to_datetime(df_my['date'])
df_my = df_my.set_index('date')

# новый столбец
df_my['amount_pln'] = df_my['amount'] * 4.5

# группировка
print(df_my.groupby('category')['amount'].agg(['sum','mean']))

# корреляция
print(df_my[['amount','amount_pln']].corr())

# график
df_my['amount'].plot(kind='bar')
plt.show()











Отвечу как студент кратко и по делу:

⸻

1. Основные типы индексов в Pandas. Для чего DatetimeIndex?
Основные типы индексов:

* Index (обычный числовой/строковый)
* RangeIndex (автоматическая нумерация)
* DatetimeIndex (даты и время)
* TimedeltaIndex (разницы во времени)
* PeriodIndex (периоды времени)

DatetimeIndex используется для работы с временными рядами: анализ данных по датам, ресемплинг, выборка по времени (например, по дням/месяцам).

⸻

2. Что такое MultiIndex? Как отобрать данные по одному уровню?
MultiIndex — это многоуровневый индекс (иерархический), когда у строк/столбцов несколько уровней.

Отбор по одному уровню можно сделать так:

* df.xs('значение', level='имя_уровня')
* или через .loc с указанием уровня

⸻

3. Как категориальный тип экономит память?
category хранит не сами строки, а коды (числа), которые ссылаются на уникальные значения.
Если данных много и повторяются одинаковые значения — память сильно экономится.

⸻

4. Как задать порядок категорий и зачем?
Используется:

pd.Categorical(data, categories=[...], ordered=True)

Это нужно, чтобы можно было сравнивать категории (например: «плохо < нормально < хорошо») и правильно сортировать данные.

⸻

5. pd.cut() vs pd.qcut()

* cut() — делит данные на равные интервалы по значению
* qcut() — делит данные на равные группы по количеству элементов (квантили)

⸻

6. Методы ковариации и корреляции

* df.cov() — ковариация
* df.corr() — корреляция
* также Series.corr() для отдельных столбцов

⸻

7. rolling() и expanding()

* rolling() — скользящее окно фиксированного размера (например, среднее за 3 дня)
* expanding() — расширяющееся окно (с начала данных до текущего момента)

⸻

8. Медиана vs среднее

* Среднее — сумма всех значений / количество
* Медиана — центральное значение после сортировки

Медиану лучше использовать, если есть выбросы, потому что она не искажается экстремальными значениями.

⸻

9. Накопленная сумма (cumulative sum)
Используется метод:

df['col'].cumsum()

⸻

10. value_counts() vs nunique()

* value_counts() — показывает, сколько раз встречается каждое значение
* nunique() — показывает количество уникальных значений

⸻

Если нужно, могу  оформить это как шпаргалку в таблицу или Word для сдачи.