创建一个“营业时间”列来指示特定时间戳是否在 pandas 中的营业时间内

问题描述 投票:0回答:1

我正在尝试根据日期时间索引的值将“Buiness_hour”添加到数据帧中。假设如果条目介于 0800 到 1800 之间,则“Business_hour”下的条目将返回“Yes”,否则返回“No”。

现有的 df 就像:

索引 用户ID
2021-03-31 20:54:54 143173
2021-03-31 22:54:54 143173
2021-03-31 09:54:54 143173

我想插入“营业时间”栏,这样我就可以找出营业时间以外进行的交易数量

索引 用户ID 业务_小时
2021-03-31 20:54:54 143173 没有
2021-03-31 22:54:54 143173 没有
2021-03-31 09:54:54 143173 是的

我尝试将 apply 与 lambda 函数一起使用

df['Business_hour'] = df.index.apply(
    lambda x: 'Yes' if df.index.hour >= 9 and df.index.hour < 18 else 'No')

它说

'DatetimeIndex' object has no attribute 'apply'

然后我尝试了更基本的解决方案并得到了相同的结果:

def business_hr(x):
    if x >= 8:
        return 'Yes'
    if x <= 18:
        return "Yes"
    else:
        'No'

df['Business_hr'] = df.index.hour.apply(business_hr)
python pandas dataframe datetimeindex
1个回答
1
投票

使用

np.where

m = (9 <= df.index.hour) & (df.index.hour < 18)
df['Business_hour'] = np.where(m, 'Yes', 'No')
print(df)

# Output
                     UserID Business_hour
2021-03-31 20:54:54  143173            No
2021-03-31 22:54:54  143173            No
2021-03-31 09:54:54  143173           Yes

如果您想使用您的函数,请将

apply
(DataFrame)替换为
map
(系列):

def business_hr(x):
    return 'Yes' if 8 <= x < 18 else 'No'

df['Business_hour'] = df.index.hour.map(business_hr)
print(df)

# Output
                     UserID Business_hour
2021-03-31 20:54:54  143173            No
2021-03-31 22:54:54  143173            No
2021-03-31 09:54:54  143173           Yes
© www.soinside.com 2019 - 2024. All rights reserved.