我有以下数据框:
A B
a1 2016-10-24
b1 2016-11-25
b2 2017-02-26
a2 2016-11-23
b2 2017-01-03
b3 2017-03-24
在第 1 步中,我提取以 a 开头的行:
df[df.A.str.startswith("a")]
A B
a1 2016-10-24
a2 2016-11-23
接下来,我想将B列中的日期在接下来的2个月内的行提取到步骤1中提取的行中。
所以在示例数据框中,我想提取 B 列从 2016-10-24 到 2016-12-24 的行,或者从 2016-11-23 到 2017-01-23。
因此,我将提取 B 列从 2016-10-24 到 2017-01-23 的行。
我想要的结果如下。
A B
a1 2016-10-24
b1 2016-11-25
a2 2016-11-23
b2 2017-01-03
如何提取具有这些条件的行?
请您参考如下方法:
我觉得可以先按条件选择B,然后在end_date日期加上2个月,得到start_date 日期为 min,最后按 boolean indexing 过滤:
df1 = df.loc[df.A.str.startswith("a"), 'B']
print (df1)
0 2016-10-24
3 2016-11-23
Name: B, dtype: datetime64[ns]
end_date = df1.max() + pd.offsets.DateOffset(months=2)
start_date = df1.min()
print (start_date)
2016-10-24 00:00:00
print (end_date)
2017-01-23 00:00:00
print (df[(df.B >= start_date)&(df.B <= end_date)])
A B
0 a1 2016-10-24
1 b1 2016-11-25
3 a2 2016-11-23
4 b2 2017-01-03
