2017-01-31 4 views
2

内の行を抽出するために、私は、次のデータフレームがあります。ステップ1ではどのように日付条件

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 

を、Iで始まる行を抽出します。

df[df.A.str.startswith("a")]

A B 
a1 2016-10-24 
a2 2016-11-23 

次に、私は次の2ヶ月の列Bの日付が抽出された行にステップ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 

これらの条件で行を抽出するにはどうすればよいですか?

答えて

2

私はその後、boolean indexingによってmin、最後のフィルタとしてstart_date日付を取得、end_date日に2ヶ月を追加し、あなたが最初の条件によってBを選択することができると思います。

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