从数据框中删除最近n天

时间:2019-06-04 13:14:42

标签: python pandas dataframe

我有一个带有日期时间索引(频率为30分钟)的熊猫数据框。我想从中删除“ n”天。我的数据框不包括周末,所以如果它的最后一天是星期一,我想从星期一开始删除星期一,星期五和星期四。所以,我的意思是观察天数,而不是日历。最Python的方式是什么?

谢谢。

1 个答案:

答案 0 :(得分:2)

熊猫知道工作日为星期一至星期五。

因此,如果您要从数据框中删除最近n个工作日,则可以执行以下操作:

df.drop(df[df.index >= df.index.max().date()-pd.offsets.BDay(n-1)].index, inplace=True)

如果您确实需要删除数据框中的可观察的天,则if会稍微复杂些,因为您必须计算天数。代码可能是(使用名为df_days的配套数据框):

# create a dataframe with same index and only one row per day:
df_days = pd.DataFrame(index=df.index).assign(day=df.index.date).drop_duplicates('day')
# now count the observed day in the companion dataframe
df_days['new_day'] = 1
df_days['days'] = df_days['new_day'].cumsum()
# compute first index to remove to remove last observed n days
ix = df_days.loc[df_days['days'] == df_days['days'].max() + 1 - n].index[0]

# ok drop the last observed n days from the initial dataframe and delete the companion one
df.drop(df.loc[df.index > ix].index)
del df_days