我正在尝试根据日期时间索引的值将“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)
使用
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