Питон datetime
против Панд datetime
Есть две взаимосвязанные причины, по которым вы видите низкую производительность:
- Вы используете встроенные в Python
datetime
объекты вместо эффективных серий Pandas datetime
для хранения дат.
- Вы используете петли
for
уровня Python вместо векторизованных операций, поддерживаемых сериями Pandas datetime
.
Итак, сначала преобразуйте вашу серию в серию Панд datetime
:
date_format = '%Y-%m-%d %H:%M:%S'
df['SalesDate'] = pd.to_datetime(df['SalesDate'], format=date_format, errors='coerce')
Затем извлеките атрибуты прямо из вашей серии:
from operator import attrgetter
# list attributes
fields = ['year', 'month', 'day', 'dayofyear', 'dayofweek', 'hour']
# extract attributes
attributes = pd.concat(attrgetter(*fields)(df['SalesDate'].dt), axis=1, keys=fields)
# join attributes to dataframe
df = df.join(attributes)
Панды GroupBy
объекты
Это объединение элементов в list
не нужно:
grouped = data.groupby(['LocationID','ItemID'])
result = []
for name, group in grouped:
result += [(name, group)]
return result
Поскольку data.groupby(...)
является итеративным, вы можете просто return
объект GroupBy
:
return data.groupby(['LocationID','ItemID'])