Python 根据值之间的时间筛选值
这是我的数据帧:Python 根据值之间的时间筛选值,python,pandas,Python,Pandas,这是我的数据帧: Date Bool 0 2020-09-02 False 1 2020-09-03 False 2 2020-09-04 True 3 2020-09-05 True 4 2020-09-06 False ... 3034 2028-12-28 True 3035 2028-12-29 False 3036 2028-12-
Date Bool
0 2020-09-02 False
1 2020-09-03 False
2 2020-09-04 True
3 2020-09-05 True
4 2020-09-06 False
...
3034 2028-12-28 True
3035 2028-12-29 False
3036 2028-12-30 True
3037 2028-12-31 False
3038 2029-01-01 False
如果“介于真值之间”是1个日历日或2个日历日,则我要对其进行筛选。只有第二个真值有效。因此,它将是:
Date Bool Bool_Filter
0 2020-09-02 False False
1 2020-09-03 False False
2 2020-09-04 True False
3 2020-09-05 True True
4 2020-09-06 False False
...
3034 2028-12-28 False False
3035 2028-12-29 True False
3036 2028-12-30 True True
3037 2028-12-31 False False
3038 2029-01-01 False False
如何做到这一点?您可以使用该功能来实现这一点
从您的示例中,不清楚当有两个以上的连续真值时会发生什么,但这与您提供的示例解决方案相匹配:
import pandas as pd
from pandas.core.series import Series
from datetime import date
data = [[date(2020, 9, 2), False], [date(2020, 9, 3), False],
[date(2020, 9, 4), True], [date(2020, 9, 5), True],
[date(2020, 9, 6), False], [date(2028, 12, 28), False],
[date(2028, 12, 29), True], [date(2028, 12, 30), True],
[date(2028, 12, 31), False], [date(2029, 1, 1), False]]
df = pd.DataFrame(data, columns=['Date', 'Bool'])
df['Bool_Filter'] = (
df['Bool'] & \
(df['Bool'].shift(1)
& ((df['Date'].shift(1) - df['Date']) <= '2 days'))
)
将熊猫作为pd导入
从pandas.core.series导入系列
起始日期时间导入日期
数据=[[日期(2020年9月2日),假],[日期(2020年9月3日),假],
[日期(2020年9月4日),正确],[日期(2020年9月5日),正确],
[日期(2020年9月6日),假],[日期(2028年12月28日),假],
[日期(2028年12月29日),正确],[日期(2028年12月30日),正确],
[日期(2028,12,31),假],[日期(2029,1,1),假]]
df=pd.DataFrame(数据,列=['Date','Bool'])
df['Bool_Filter']=(
df['Bool']和\
(df['Bool'].移位(1)
&((df['Date'].shift(1)-df['Date'])这回答了你的问题吗?我现在还不清楚这个问题~@BEN_-YO我编辑了问题df['Bool_filter']=(df['Date'].diff(),介于(最小,最大)和df['Bool']
。编辑min
和max
作为您选择的时间增量。请参阅@deponovo min和max-变量是什么?整数,如0、1或2(天数)?