我正在处理一个问题,我必须接受用户输入,这是一个整数,表示我必须查看的月份数。例如,如果我想查看3个月前的数据,我必须将用户的输入作为3。基于这个整数用户输入,我必须过滤我的数据集。例如,今天的日期是2022年8月30日,因此三个月后将是2022年5月30日。现在我想过滤我的数据帧,只包括3个月前的日期,即2022年5月30日的那些行
我试着使用日期时间和相对时间库,但似乎什么都不适合我
下面是我的数据帧示例:
id text1 text2日期1名公羊患者2022年5月30日10:22:002约翰患者2022年5月30日11:45:083富家子弟2022年5月28日10:45:13
所以我希望输出是对应于1和2 的行
在此处输入图像描述
您可以在Pandas中使用DateOffset
函数。有关更多详细信息,请参阅文档。
下面是一个例子,假设您有一个带有日期列的数据框:
num_months = int(input('Please enter the number of months to look back: '))
df['date'] = pd.to_datetime(df['date'])
past_date = pd.to_datetime('today') - pd.DateOffset(months=num_months)
df = df[df['date'] >= past_date]
print(df)
以上操作将过滤date
列上的数据帧,只留下日期在计算日期当天或之后的行,即今天的日期减去指定的月数。
请试着在未来展示你的尝试,这感觉就像我在做你的家庭作业,但希望这能给你一个想法。
import pandas as pd
df = pd.DataFrame({'id': [1, 2, 3], 'text1': ['Ram', 'John', 'Rich'], 'text2': ['patient', 'patient', 'child'], 'date': ['5/30/2021 10:22:00', '5/30/2022 11:45:08', '5/28/2022 10:45:13']})
user_input = int(input("Enter the number of months to look back: "))
#convert the date column to datetime
df['date'] = pd.to_datetime(df['date'])
#set the date column as index
df = df.set_index('date')
#sort the index
df = df.sort_index()
#filter the dataframe to get the rows which are within the last x months
df = df[df.index >= pd.Timestamp.today() - pd.DateOffset(months=user_input)]
#convert the index back to a column
df.reset_index(inplace=True)
#print the filtered dataframe
print(df)
输入:
Enter the number of months to look back: 12
输出:
date id text1 text2
0 2022-05-28 10:45:13 3 Rich child
1 2022-05-30 11:45:08 2 John patient