pandasसंस्करण के मेरे परीक्षण के साथ 0.22.0अब आप केवल उपयोग करके अधिक पठनीय कोड के साथ इस प्रश्न का आसान उत्तर दे सकते हैं between।
# create a single column DataFrame with dates going from Jan 1st 2018 to Jan 1st 2019
df = pd.DataFrame({'dates':pd.date_range('2018-01-01','2019-01-01')})
मान लीजिए कि आप 27 नवंबर 2018 से 15 जनवरी 2019 के बीच तारीखों को हथियाना चाहते हैं:
# use the between statement to get a boolean mask
df['dates'].between('2018-11-27','2019-01-15', inclusive=False)
0 False
1 False
2 False
3 False
4 False
# you can pass this boolean mask straight to loc
df.loc[df['dates'].between('2018-11-27','2019-01-15', inclusive=False)]
dates
331 2018-11-28
332 2018-11-29
333 2018-11-30
334 2018-12-01
335 2018-12-02
समावेशी तर्क पर ध्यान दें। बहुत उपयोगी है जब आप अपनी सीमा के बारे में स्पष्ट होना चाहते हैं। सूचना जब हम सच में सेट करते हैं तो हम २०१ we के नवंबर २ we को लौटेंगे:
df.loc[df['dates'].between('2018-11-27','2019-01-15', inclusive=True)]
dates
330 2018-11-27
331 2018-11-28
332 2018-11-29
333 2018-11-30
334 2018-12-01
यह विधि पहले बताई गई isinविधि से भी तेज है :
%%timeit -n 5
df.loc[df['dates'].between('2018-11-27','2019-01-15', inclusive=True)]
868 µs ± 164 µs per loop (mean ± std. dev. of 7 runs, 5 loops each)
%%timeit -n 5
df.loc[df['dates'].isin(pd.date_range('2018-01-01','2019-01-01'))]
1.53 ms ± 305 µs per loop (mean ± std. dev. of 7 runs, 5 loops each)
हालांकि, यह वर्तमान में स्वीकार किए गए उत्तर की तुलना में तेज नहीं है , अनटुब द्वारा प्रदान किया गया है, केवल अगर मुखौटा पहले से ही बनाया गया है । लेकिन अगर मुखौटा गतिशील है और उसे बार-बार आश्वस्त करने की आवश्यकता है, तो मेरा तरीका अधिक कुशल हो सकता है:
# already create the mask THEN time the function
start_date = dt.datetime(2018,11,27)
end_date = dt.datetime(2019,1,15)
mask = (df['dates'] > start_date) & (df['dates'] <= end_date)
%%timeit -n 5
df.loc[mask]
191 µs ± 28.5 µs per loop (mean ± std. dev. of 7 runs, 5 loops each)