Как добавить вычисляемый столбец в DataFrame Pandas?

Вопрос или проблема

Я новичок в Python/Pandas, и у меня возникают некоторые трудности.

У меня есть DataFrame с данными о качестве воздуха с 2016 по 2020 год. Я хочу рассчитать годовой темп изменения для каждого измеряемого значения, чтобы сравнить их с прошлогодним значением в тот же день и месяц.

Это первые строки DataFrame.

         Дата Страна       Город Вид счет   мин   макс медиана дисперсия
0  2020-02-23      CR   Сан-Хосе   pm25    20  13.0  53.0   25.0  1232.00
1  2020-04-04      CR   Сан-Хосе   pm25    23  17.0  57.0   38.0  1302.57
2  2020-04-24      CR   Сан-Хосе   pm25    23  30.0  80.0   59.0  1966.13
3  2020-01-14      CR   Сан-Хосе   pm25    24  13.0  34.0   21.0   379.55
4  2020-02-07      CR   Сан-Хосе   pm25    23  57.0  95.0   72.0   838.97

У кого-нибудь есть идеи, как мне поступить?

Для ответа я делаю предположение:

  • В DataFrame есть одна строка для каждой даты в прошедшие годы

Установите Дата в качестве индекса для DataFrame

df_dateInx = df.set_index('Дата')

Теперь вы можете получить строку для конкретной даты, используя следующий код

df_row = df_dateInx.loc['2018-07-15']

Добавьте новый столбец в DataFrame ‘ChangePercent’ в конце

#df_dateInx.insert(индекс_вставки, название_столбца)
df_dateInx.insert(df_row.shape[1], 'ChangePercent', True)

Создайте функцию для расчета разницы относительно значения за предыдущий год в тот же день и месяц. Эта функция будет вызываться для каждой строки DataFrame

def calChange(row):
   change = 0
   val_prev_yr = df_dateInx.loc[row.Date - 1]['мин']
   val_this_row = row['мин']
   # сделайте что-нибудь со значениями и верните change
   return change

П.С. row.Date - 1 используйте функцию strptime для даты/времени, чтобы сделать это

П.С. Если есть несколько строк одной и той же даты, используйте df_dateInx.loc[row.Date - 1]['мин'][0], где [0] означает выбор первой строки из нескольких строк с одной и той же датой

Вызовите вышеупомянутую функцию для каждой строки DataFrame

df_dateInx.agg([calChange])

И вы получите DataFrame, который содержит значения в столбце Change в соответствии с вашими потребностями

Попробуйте:

# Игровой набор данных:
air = pd.DataFrame({"Дата":["2020-02-23","2020-04-04","2020-04-24","2020-01-14","2020-02-07"],
"Страна":["CR","CR","CR","CR","CR"],
"счет":[20,23,23,24,23],
"макс":[13.0,17.0,30.0,13.0,57.0 ],
"мин":[20,23,23,24,23],
"медиана":[53.0,57.0,80.0,34.0,95.0]})

Ввод:

введите описание изображения здесь

# Столбец индекса должен быть формата datetime, поэтому
air["Дата"] = pd.to_datetime(air["Дата"])

# Группировка по годам
air.set_index("Дата").groupby(pd.Grouper(freq = "y"))[["счет","мин","макс"]].diff()

Вывод:

введите описание изображения здесь

Ответ или решение

Чтобы добавить вычисляемый столбец в DataFrame Pandas и рассчитать годовой темп изменения для данных о качестве воздуха за период с 2016 по 2020 год, мы пройдем через несколько шагов. Давайте рассмотрим, как это сделать, используя предоставленную информацию и шаги по решению вашей задачи.

Шаг 1: Установка и подготовка среды

Перед началом убедитесь, что у вас установлен Pandas. Вы можете установить его с помощью pip:

pip install pandas

Шаг 2: Импорт необходимых библиотек

Импортируем Pandas и создадим исходный DataFrame на основе ваших данных:

import pandas as pd

# Создаем исходный DataFrame
data = {
    "Date": ["2020-02-23", "2020-04-04", "2020-04-24", "2020-01-14", "2020-02-07"],
    "Country": ["CR", "CR", "CR", "CR", "CR"],
    "City": ["San José", "San José", "San José", "San José", "San José"],
    "Specie": ["pm25", "pm25", "pm25", "pm25", "pm25"],
    "count": [20, 23, 23, 24, 23],
    "min": [13.0, 17.0, 30.0, 13.0, 57.0],
    "max": [53.0, 57.0, 80.0, 34.0, 95.0],
    "median": [25.0, 38.0, 59.0, 21.0, 72.0],
    "variance": [1232.00, 1302.57, 1966.13, 379.55, 838.97],
}

df = pd.DataFrame(data)

Шаг 3: Преобразование даты и установка индекса

Настроим столбец ‘Date’ как индекс DataFrame для удобной обработки:

df["Date"] = pd.to_datetime(df["Date"])
df.set_index("Date", inplace=True)

Шаг 4: Вычисление годового изменения

Для расчета изменения годового показателя по данным за каждый год мы воспользуемся методом shift() вместе с функцией groupby(), чтобы обработать данные по годам. Ниже приведён полный код расчёта:

# Группируем по году и находим разницу значений min по годам
df['ChangePercent'] = df['min'].groupby([df.index.year]).transform(lambda x: x.pct_change(periods=1))

# Вводим колонку, чтобы видеть изменения на основе предыдущего года
df['AnnualChange'] = df['ChangePercent'] * 100

Шаг 5: Проверка результатов

После добавления новых столбцов, вы можете вывести DataFrame, чтобы убедиться в корректности вычислений:

print(df)

Шаг 6: Обработка ошибок и Nuances

  1. Проверка на NaN: В результате pct_change() для первого наблюдения (например 2016) вы можете получить NaN, так как нет предыдущего года для сравнения. Учтите это в анализе.

  2. Учет дубликатов: Если у вас есть несколько записей на одну и ту же дату, вам нужно будет обработать их, например, путём группировки и усреднения значений.

  3. Формат представления: Убедитесь, что у вас правильный формат для вывода, особенно для столбцов с процентами.

Заключение

В данной статье мы рассмотрели, как добавить вычисляемый столбец в DataFrame Pandas для расчета годового изменения значений за определенный период. Вычисление изменений позволяет лучше анализировать данные о качестве воздуха и способствует более глубокому пониманию изменений во времени.

Если у вас возникнут дополнительные вопросы или потребуется уточнение, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...