我有一个带有日期索引的pandas数据框架。这样的
A B C
date
2021-04-22 2 1 3
2021-05-22 3 2 4
2021-06-22 4 3 5
2021-07-22 5 4 6
2021-08-22 6 5 7
我想创建一个新的数据框架,选择仅为给定日期前2天的行。例如,如果我输入selected = '2021-08-22',我需要的是一个新的数据框架,就像下面的
A B C
date
2021-07-22 5 4 6
2021-08-22 6 5 7
有人能帮我一下吗?非常感谢您的帮助
您可以将索引转换为DatetimeIndex,然后使用df[start_date : end_date]
df.index = pd.to_datetime(df.index)
selected = '2021-08-22'
res = df[(pd.to_datetime(selected)-pd.Timedelta(days=2)) : selected]
print(res)
A B C
2021-08-22 6 5 7
我想你是指月而不是天。
您可以使用df.apply
方法来使用函数过滤数据框行。
下面是一个函数,它接收您描述的输入并返回新的数据帧:
工作示例
def filter_df(df, date, num_months):
def diff_month(row):
date1 = datetime.strptime(row["date"], '%Y-%m-%d')
date2 = datetime.strptime(date, '%Y-%m-%d')
return ((date1.year - date2.year) * 12 + date1.month - date2.month)
return df[df.apply(diff_month, axis=1) > - num_months]
print(filter_df(df, "2021-08-22", 2))