python-3.x - 无法比较不同的日子
问题描述
我的代码如下所示:
import pandas as pd
from datetime import datetime, timedelta
df = pd.DataFrame ({
'User':['Mcafee','John','Albert'],
'LastOnline':['4/1/2020 1:41:17', '3/5/2020 09:1:23', '1/1/2020 06:51:1'],
'Status':["NaN","NaN","NaN"]
})
df['LastOnline'] = pd.to_datetime(df['LastOnline'],format='%m/%d/%Y %H:%M:%S')
date = '04/03/2020'
datetime_object = datetime.strptime(date, '%m/%d/%Y')
diff = datetime_object - df['LastOnline']
seven_days = timedelta(days=7)
thirty_days = timedelta(days=30)
if diff <= seven_days:
df['Status'] = "7 days ago"
elif (diff > seven_days) & (diff <= thirty_days):
df['Status'] = "30 days ago"
else:
df['Status'] = "disable it"
print(df)
初始df是:
User LastOnline Status
0 Mcafee 2020-04-01 01:41:17 NaN
1 John 2020-03-05 09:01:23 NaN
2 Albert 2020-01-01 06:51:01 NaN
我想要实现的是基于一个简单的逻辑来改变状态列。如果df['LastOnline']在 7 天内,则将df['Status']更改为 7 天前,依此类推,如上述 if 语句中所述。这是正确的输出。
User LastOnline Status
0 Mcafee 2020-04-01 01:41:17 7 days ago
1 John 2020-03-05 09:01:23 30 days ago
2 Albert 2020-01-01 06:51:01 disable it
但我得到这个错误:
File ".\test.py", line 21, in <module>
if diff <= seven_days:
File "C:\Users\\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\generic.py", line 1555, in __nonzero__
self.__class__.__name__
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
什么比较不起作用?谢谢!
解决方案
在与现有系列 ( )取得差异后,您可以避免循环并使用np.select
with :series.dt.days
datetime_object
'LastOnline'
days_diff = (datetime_object - df['LastOnline']).dt.days
#define the conditions
c1,c2 = days_diff.le(7) , days_diff.gt(7) & days_diff.le(30)
df['Status'] = np.select([c1,c2],['7 days ago','30 days ago'],'disable it')
print(df)
User LastOnline Status
0 Mcafee 2020-04-01 01:41:17 7 days ago
1 John 2020-03-05 09:01:23 30 days ago
2 Albert 2020-01-01 06:51:01 disable it
推荐阅读
- ruby-on-rails - 当匹配列在两个表之外时,如何找到记录?
- dart - Flutter:根据排序的值列表对小部件进行排序
- adobe - ArgumentError:错误 #2108:找不到场景场景 4。[adobe 动画 cc 2018]
- reactjs - 无法在 github 页面上使用 npm run 在 React 中部署
- database - 使用 Access 2016 的 Access Database 2000 的问题
- excel - 如何在单元格内对包含相关表格的列进行排序 [Excel]
- mysql - 如何查找与 MySQL 表无关的项目
- java - 如何使用 java 连接到启用 SSL 和 Auth 的 MongoDB
- reactjs - 我正在尝试在 Github 页面上部署我的 Gatsby 博客,但“npm run deploy”返回错误
- java - “VM 初始化期间发生错误无法为 1048576KB 对象堆保留足够的空间”