簡體   English   中英

如何在忽略年份的兩個日期(日/月)之間分割 pandas DataFrame?

[英]How to slice a pandas DataFrame between two dates (day/month) ignoring the year?

我想在 4 月 15 日至 9 月 16 日之間使用 DatetimeIndex 篩選 pandas DataFrame 多年。 之后我想給掩碼設置一個值。

我希望有一個類似於 between_time between_time()的 function ,但這不存在。

我的實際解決方案是在獨特的年份中循環。

最小的例子

import pandas as pd

df = pd.DataFrame({'target':0}, index=pd.date_range('2020-01-01', '2022-01-01', freq='H'))

start_date = "04-15"
end_date = "09-16"
for year in df.index.year.unique():
    # normal approche
    # df[f'{year}-{start_date}':f'{year}-{end_date}'] = 1

    # similar approche slightly faster
    df.iloc[df.index.get_loc(f'{year}-{start_date}'):df.index.get_loc(f'{year}-{end_date}')+1]=1

是否存在可以避免循環並可能提高性能的解決方案?

要獲取 4 月 1 日到 10 月 31 日之間的日期,如何使用月份?

df.loc[df.index.month.isin(range(4, 10)), 'target'] == 1

如果你想要 map 任何日期/時間,只是忽略年份,你可以將年份替換為 2000(閏年)並使用:

s = pd.to_datetime(df.index.strftime('2000-%m-%d'))
df.loc[(s >= '2000-04-15') & (s <= '2020-09-16'), 'target'] = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM