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
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你是对的,我刚刚做了一个编辑,应该可以,让我知道。现在可以了!谢谢你!