有没有可能用IntervalIndex或者类似的东西来过滤Pandas Dataframe ?

5jvtdoz2  于 2023-01-19  发布在  其他
关注(0)|答案(2)|浏览(83)

我有一个带有DatetimeIndex的panda Dataframe 。我想一次按15天的块过滤此 Dataframe 。要手动完成此操作,我可以执行以下操作:

start, end = pd.Timestamp('2022-07-01'), pd.Timestamp('2022-07-16')
filt_df = df[start: end]

然而,我希望能够在长范围内完成这些操作,而无需手动创建这些过滤字符串。我可以只迭代一个循环,并使用pd.Timedelta推进它们,但似乎我应该能够使用Pandas内置的函数来做一些事情,如pandas.interval_range或类似的东西。然而,interval_range生成一个IntervalIndex,我不知道如何使用它来过滤 Dataframe 。有没有更干净的方法来完成我在这里尝试做的事情?

kgqe7b3p

kgqe7b3p1#

如果我没有理解错您的问题,您可以使用pd.date_range()groupby()

date_range = pd.date_range(start='2022-07-01', end='2022-07-31', freq='15D')

for start, end in zip(date_range, date_range[1:]):
    filt_df = df.groupby(pd.cut(df.index, bins=[start, end])).get_group(start)
    # Do something with filt_df
roejwanj

roejwanj2#

您可以使用Grouper

import pandas as pd
idx = pd.date_range('2022-07-01', '2022-10-01')
df = pd.DataFrame({'idx': range(1,len(index)+1)}, index=idx)
df_chunks = [df_chunk for index, df_chunk in df.groupby(pd.Grouper(freq='15D'))] 

Out[23]: 
[            idx
 2022-07-01    1
 2022-07-02    2
 2022-07-03    3
 2022-07-04    4
 2022-07-05    5
 2022-07-06    6
 2022-07-07    7
 2022-07-08    8
 2022-07-09    9
 2022-07-10   10
 2022-07-11   11
 2022-07-12   12
 2022-07-13   13
 2022-07-14   14
 2022-07-15   15,
             idx
 2022-07-16   16
 2022-07-17   17

相关问题