繁殖日期Pandas和interp

2024-06-16 10:48:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我们有一些特定时期的现成销售数据,例如1周、1个月……1年:

time_pillars = pd.Series(['1W', '1M', '3M', '1Y'])
sales = pd.Series([4.75, 5.00, 5.10, 5.75])
data = {'time_pillar': time_pillars, 'sales': sales}
df = pd.DataFrame(data)

我想做两个手术。 首先,创建一个日期类型为df['date']的新列,它对应于从现在开始的1周,1个月…1年的实际日期。在

然后,我想创建另一列df['days_from_now'],用这些支柱上的天数(1周为7天,1个月为30天左右,1年约为365天)。在

这样做的目的是使用任意一天作为一个简单的线性插值方法()的输入,以获得任何给定日期的销售数据(例如,2018年10月4日的销售额是多少?--->;我们将在3个月到1年之间进行插值)。 非常感谢。在


Tags: 数据类型dataframedfdatadatetimedays
1条回答
网友
1楼 · 发布于 2024-06-16 10:48:53

我不太清楚您的插值是什么意思,但是这里有一种方法可以使您的数据帧在pandas(从您在帖子中提供的原始df开始):

from datetime import datetime
from dateutil.relativedelta import relativedelta

def create_dates(df):
    df['date'] = [i.date() for i in 
                   [d+delt for d,delt in zip([datetime.now()] * 4 , 
                   [relativedelta(weeks=1), relativedelta(months=1), 
                       relativedelta(months=3), relativedelta(years=1)])]]
    df['days_from_now'] = df['date'] - datetime.now().date()
    return df

create_dates(df)

   sales time_pillar        date days_from_now
0   4.75          1W  2018-04-11        7 days
1   5.00          1M  2018-05-04       30 days
2   5.10          3M  2018-07-04       91 days
3   5.75          1Y  2019-04-04      365 days

我把它包装在一个函数中,这样你就可以在任何给定的一天调用它,从那天起得到1周、3周等的结果。在

注意:如果您希望您的days_from_now只是天数的整数,请在函数中使用df['days_from_now'] = [i.days for i in df['date'] - datetime.now().date()],而不是{}

说明:

^{pr2}$

获取重复4次的今天日期列表(datetime.now()),并分别添加1周、1个月、3个月和1年的relativedelta(时差),提取日期(i.date() for ...),最后使用得到的列表创建一个新列。在

df['days_from_now'] = df['date'] - datetime.now().date()

简单得多,它只是从今天的日期中减去上面的新日期。结果是一个timedelta对象,pandas可以方便地格式化为“n days”。在

相关问题 更多 >