Csv Python/pandas:使用日期差的列值的加权平均值

Csv Python/pandas:使用日期差的列值的加权平均值,csv,pandas,mean,weighted,Csv,Pandas,Mean,Weighted,我有一个数据框,我使用read_csv()导入它,它的两列是日期(“StartDate”和“EndDate”),日期格式为dd/mm/yyyy。另一列包含可能的每日价格(“价格”) 一个(非常小的)提取物看起来像: DateStart DateEnd Price 01/01/2015 31/01/2015 100 01/01/2015 02/01/2015 10 我需要计算平均每日价格,即:(31*100+2*10)/(31+2),使用天数作为权重 如何获取开始日期和结束日期之间

我有一个数据框,我使用
read_csv()
导入它,它的两列是日期(“StartDate”和“EndDate”),日期格式为dd/mm/yyyy。另一列包含可能的每日价格(“价格”)

一个(非常小的)提取物看起来像:

DateStart  DateEnd     Price
01/01/2015 31/01/2015  100
01/01/2015 02/01/2015  10
我需要计算平均每日价格,即:
(31*100+2*10)/(31+2)
,使用天数作为权重

如何获取开始日期和结束日期之间的天数?据我所知,此格式dd/mm/yyyy将不会被识别为日期


一旦我有了间隔中的天数,如何计算加权平均数?

您可以将
dayfirst=True
传递到
to\u datetime
来解析这些日期。然后,您可以计算差值并计算加权平均值

In [82]: for c in ['DateStart','DateEnd']:
    ...:     df[c] = pd.to_datetime(df[c], dayfirst=True)

In [87]: df['day_diff'] = (df['DateEnd'] - df['DateStart']).dt.days + 1


In [88]: df['Price'].dot(df['day_diff']) / df['day_diff'].sum()
Out[88]: 94
导入日期时间,熊猫作为pd,numpy作为np
  • 首先,定义csv中的日期格式
  • dateparse=lambda x:pd.datetime.strtime(x,“%d/%m/%Y”)
    
  • 然后读取并指定日期列
  • df=pd.read\u csv(“file.csv”,parse\u dates=['DateStart','DateEnd'],date\u parser=dateparse)
    
  • 以下是您的结果:
  • 天数=((df.DateEnd-df.DateStart+datetime.timedelta(1))/np.timedelta64(1,'D'))
    结果=(天数*df.Price).sum()/天数.sum()
    打印结果
    

    瞧,谢谢你的回答。您的解决方案几乎有效,但并不完全有效。实际上,通过计算
    ((df.DateEnd-df.DateStart+datetime.timedelta(1))*df.Price)
    可能会出现某种溢出,其结果在这里是几天。例如,如果170天,价格是619,我得到的结果是105230,这是可以的,但如果价格是640,我得到的结果是-104024!应该更改某些内容,以指定天*价格是无单位的。有可能吗?因此,我可以得到一些正价格的负平均值。@Elsalex你是对的,我刚刚做了一个编辑,应该可以,让我知道。现在可以了!谢谢你!