У меня есть кадр данных pandas mydf
, который имеет два столбца, а оба столбца - это datetime-типы данных: mydate
и mytime
. Я хочу добавить еще три столбца: hour
, weekday
и weeknum
.
def getH(t): #gives the hour
return t.hour
def getW(d): #gives the week number
return d.isocalendar()[1]
def getD(d): #gives the weekday
return d.weekday() # 0 for Monday, 6 for Sunday
mydf["hour"] = mydf.apply(lambda row:getH(row["mytime"]), axis=1)
mydf["weekday"] = mydf.apply(lambda row:getD(row["mydate"]), axis=1)
mydf["weeknum"] = mydf.apply(lambda row:getW(row["mydate"]), axis=1)
Фрагмент работает, но он не является эффективным с точки зрения вычислений, поскольку он циклически проходит через кадр данных как минимум три раза. Я просто хотел бы узнать, есть ли более быстрый и/или более оптимальный способ сделать это. Например, используя zip
или merge
? Если, например, я просто создаю одну функцию, которая возвращает три элемента, как мне это реализовать? Для иллюстрации функция:
def getHWd(d,t):
return t.hour, d.isocalendar()[1], d.weekday()