Как использовать apply () с функцией с несколькими параметрами? Python Pandas - PullRequest
0 голосов
/ 06 мая 2020

У меня есть эта функция для продления дат, и я хотел бы использовать параметры OpenHour и CloseHour:

def extends_dates(x,OpenHour,CloseHour):
    if len(x.groupby(x.Timestamp.dt.date)) == 1:
        return x.Timestamp
    else:
        # Create daterange
        d_range = pd.date_range(start=x.Timestamp.dt.date.min(), end=x.Timestamp.dt.date.max()) \
            .repeat(2) \
            .to_series() \
            .iloc[1:-1] \
            .reset_index(drop=True) \
            .apply(pd.Timestamp)
        # Set hours of all date
        news = [d.replace(hour=CloseHour) if i % 2 == 0 else d.replace(hour=OpenHour)
                for i, d in enumerate(d_range)]
        # Add min (from dataframe)
        news.insert(0, min(x.Timestamp))
        # Add max date (from dataframe)
        news.append(max(x.Timestamp))
        return pd.Series(news, name="Timestamp")

Но когда я использовал ее с 5h и 20h, она не работает:

 out = df.groupby(df.index // 2).apply(extends_dates, args=(5,20)).reset_index(drop=True).to_frame()

TypeError: extends_dates() got an unexpected keyword argument 'args'

Раньше я так использовал без OpenHour и CloseHour в параметрах:

 out = df.groupby(df.index // 2).apply(extends_dates).reset_index(drop=True).to_frame()
...