我有以下数据框:
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步中,我提取以:
开头的行 df[df.A.str.startswith("a")]
A B
a1 2016-10-24
a2 2016-11-23
接下来,我想在步骤1中将提取行中接下来2个月中B列日期的行提取出来。
因此,在示例数据框中,我想提取列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
如何使用这些条件提取行?
答案 0 :(得分:2)
我认为您可以先按条件选择B
,然后将2
个月添加到end_date
日期,将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