将变量传递给 lambda 函数

用户3507584

我有以下数据框,如下所示:

print(df_example.to_dict())
{
    "slot_id": {
        0: 1,
        1: 2,
        2: 3,
        3: 4,
        4: 5
    },
    "class": {
        0: "A",
        1: "B",
        2: "C",
        3: "D",
        4: "E"
    },
    "day": {
        0: "Monday",
        1: "Tuesday",
        2: "Wednesday",
        3: "Thursday",
        4: "Saturday"
    },
    "base_date": {
        0: Timestamp("2019-01-21 00: 00: 00"),
        1: Timestamp("2019-01-22 00: 00: 00"),
        2: Timestamp("2019-01-23 00: 00: 00"),
        3: Timestamp("2019-01-24 00: 00: 00"),
        4: Timestamp("2019-01-26 00: 00: 00")
    },
    "next_date": {
        0: nan,
        1: nan,
        2: nan,
        3: nan,
        4: nan
    },
    "base_date_weekday": {
        0: 0,
        1: 1,
        2: 2,
        3: 3,
        4: 5
    }
}

df_example.head

对于 column next_date,我想day使用下面的 lambda 函数从今天的日期(星期一、星期二等)中找到下一个日期,即星期几(星期一、星期二等)[在这里找到]

df_example['base_date'] = pd.to_datetime(df_example['base_date'].astype(str), format='%d%m%Y')
df_example['base_date_weekday'] = df_example['base_date'].dt.dayofweek
# Lambda function to find the next date that corresponds to a particular day of the week
onDay = lambda date, day: date + datetime.timedelta(days=(day-date.weekday()+7)%7)

lambda 函数使用一个简单的整数。

df_example['next_date'] = onDay(date=datetime.date.today(), day=2)

但是如何将列传递给lambdadayday参数,以便它逐行进行计算?以下均无效:

df_example['next_date'] = onDay(date=datetime.date.today(), day=df_example['base_date_weekday'])
df_example['next_date'] = onDay(date=datetime.date.today(), day='base_date_weekday')

我曾尝试使用一个函数,df.apply但也没有成功。

def next_weekday(weekday):
    todaydate = datetime.date.today()
    days_ahead = weekday - todaydate.weekday()
    if days_ahead <= 0: # Target day already happened this week
        days_ahead += 7
    return todaydate + datetime.timedelta(days_ahead)

df_example.apply(lambda base_date_weekday: next_weekday(base_date_weekday),axis=1)

知道我如何完成这个简单的任务吗?

用户3507584

我设法通过定义一个函数并将其传递到 for 循环 (!) 来获得从今天开始的下一个工作日。我确信有更多的 Pythonic 方法可以做到这一点,我真的很高兴看到。

def next_weekday(weekday):
    todaydate = datetime.date.today()
    days_ahead = weekday - todaydate.weekday()
    if days_ahead <= 0: # Target day already happened this week
        days_ahead += 7
    return todaydate + datetime.timedelta(days_ahead)

for i in range(df_example.shape[0]):
    df_example.loc[i,'next_date'] = next_weekday(weekday=int(df_example.loc[i,'base_date_weekday']))
    print(df_example)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章