#python #pandas
Вопрос:
У меня есть фрейм данных, который выглядит так:
Date | Apples | Bananas etc
2020-01-01 | 2 | 5
2020-02-01 | 12 | 44
2020-03-01 | 4 | 45
Я хочу создать логику группировки по дате, но дата должна быть преобразована в следующую:
Если дата приходится на февраль текущего года или после этой даты, то обозначьте дату как следующий соответствующий год, в противном случае обозначьте как текущий соответствующий год. Пример:
Для яблок на 2020-01-01 год он должен быть помечен как «2020», потому что он предшествует февралю текущего года. Однако бананы в 2020-03-01 годах будут помечены как «2021», потому что дата выпадает после февраля текущего года.
Date | Apples | Bananas etc
2020 | 2 | 5
2021 | 12 | 44
2021 | 4 | 45
Как это будет работать лучше всего?
Комментарии:
1. Почему на 2021 год есть две строки? Разве их не следует сложить вместе?
Ответ №1:
Вы можете использовать np.where
для выполнения условного смещения даты.
import pandas as pd
import numpy as np
df = pd.DataFrame({'Date': ['2020-01-01', '2020-02-01', '2020-03-01'],
'Apples': [2, 12, 4],
'Bananas': [5, 44, 45]})
df['Date'] = pd.to_datetime(df['Date'])
# Add a year if the month is greater than 1
df['Date'] = np.where(df['Date'].dt.month>1, df['Date'] pd.offsets.DateOffset(years=1), df['Date'])
# If you want the actual dates
print(df.groupby('Date').sum())
Apples Bananas
Date
2020-01-01 2 5
2021-01-31 12 44
2021-03-01 4 45
# If you want grouped by year only
print(df.groupby(df['Date'].dt.year).sum())
Apples Bananas
Date
2020 2 5
2021 16 89
Комментарии:
1. спасибо, Крис, я на самом деле не хочу, чтобы они были сгруппированы. В таком случае, нам действительно нужна группа. Мне нужны только метки измененного года в кадре данных. Не могли бы вы скорректировать свой код, пожалуйста?
2.
df
будет то, что ты хочешь, простоprint(df)