python - 按数据时间列关闭的 DataFrame 过滤
问题描述
我已经设置了两个数据框,并尝试通过将日期时间对象列移动到索引来过滤结果,并使用 .last('7D') 提取过去 7 天内日期时间被“标记”的条目。它适用于第一个数据帧,但不适用于第二个。我尝试了各种变体来过滤 df 以获得我需要的东西,但无法获得准确的输出。我不知所措!这也是迭代构建的,所以如果你看到一些重构机会,请告诉我。
原始数据框: engagements
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2572 entries, 0 to 2571
Data columns (total 15 columns):
REQ_NAME 2572 non-null object
REQ_ID 2572 non-null object
STATUS 2572 non-null object
full_name 2572 non-null object
BIZ_UNIT 2572 non-null object
COMPLEXITY 2378 non-null object
PRIORITY 2390 non-null object
OPEN_DATE 2572 non-null datetime64[ns]
REQ_DATE 2572 non-null object
REQ_CAT 2572 non-null object
REQ_NOTE 2572 non-null object
CostCenter 2572 non-null int64
TargetCompletionDate 2572 non-null object
UpdateDTTM 2514 non-null datetime64[ns]
age 2572 non-null timedelta64[ns]
dtypes: datetime64[ns](2), int64(1), object(11), timedelta64[ns](1)
memory usage: 301.5+ KB
分离数据框:
active_engagements = engagements[engagements['STATUS'].isin(active_status)]
comp_engagements = engagements[engagements['STATUS'].isin(comp_status)]
第一个过滤器:
act_eng_open_lw = active engagements.set_index('OPEN_DATE')
act_eng_open_lw = act_eng_open_lw.last('7D')
输出是我希望看到的 10 行数据
问题子数据框:
act_eng_comp_lw = comp_engagements.set_index('UpdateDTTM')
act_eng_comp_lw = act_eng_comp_lw.last('7D')
输出为 105 行,我预计为 32
两个过滤的 DF 上的信息调用: act_eng_open_lw
:
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 10 entries, 2019-12-20 to 2019-12-26
Data columns (total 14 columns):
REQ_NAME 10 non-null object
REQ_ID 10 non-null object
STATUS 10 non-null object
full_name 10 non-null object
BIZ_UNIT 10 non-null object
COMPLEXITY 5 non-null object
PRIORITY 5 non-null object
REQ_DATE 10 non-null object
REQ_CAT 10 non-null object
REQ_NOTE 10 non-null object
CostCenter 10 non-null int64
TargetCompletionDate 10 non-null object
UpdateDTTM 5 non-null datetime64[ns]
age 10 non-null timedelta64[ns]
dtypes: datetime64[ns](1), int64(1), object(11), timedelta64[ns](1)
memory usage: 1.2+ KB
act_eng_comp_lw
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 105 entries, 2019-12-26 to 2019-11-27
Data columns (total 14 columns):
REQ_NAME 105 non-null object
REQ_ID 105 non-null object
STATUS 105 non-null object
full_name 105 non-null object
BIZ_UNIT 105 non-null object
COMPLEXITY 102 non-null object
PRIORITY 104 non-null object
OPEN_DATE 105 non-null datetime64[ns]
REQ_DATE 105 non-null object
REQ_CAT 105 non-null object
REQ_NOTE 105 non-null object
CostCenter 105 non-null int64
TargetCompletionDate 105 non-null object
age 105 non-null int64
dtypes: datetime64[ns](1), int64(2), object(11)
memory usage: 12.3+ KB
问题:使用相同的过滤器,为什么一个 Datetime 列可以正确过滤.last
而另一个不能正确过滤?
解决方案
我最终改变了我用来捕捉过去 7 天的方法,而不是.last
:
act_eng_open_lw = act_eng_open_lw[act_eng_open_lw.index > dt.datetime.now() - pd.to_timedelta("7day")]
此方法有效地适用于我的两个数据框。
推荐阅读
- vba - vba 列表框,文本框,以及更新范围
- css - 停止自动调整创建新(或删除)列,因此它不会创建空白(或项目数可被列数整除)(css 网格)
- html - 如何使 Angular Material 的按钮切换全宽但左对齐其内容?
- javascript - 移动导航没有响应
- javascript - 正则表达式从 HTML 代码的开头获取文本
- cron - 在覆盆子 crontab 上运行 cronitor
- python - Python - 如何使用 xlwt 根据在不同电子表格中使用 xlrd 找到的结果写入新的电子表格行?
- c# - 如何控制组合框结果在 switch-case 中何时为空
- r - 如何使用 ggplot2 在 Y 轴上添加美分和美元符号 ($) 的尾随零?
- kubernetes - 尝试在 Kubernetes 集群中使用 iSCSI 卷,但得到“错误的 fs 类型、错误的选项、/dev/sdb 上的错误超级块、缺少代码页或帮助程序”