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

时间:2015-08-19 20:49:21

标签: csv pandas mean weighted

我有一个数据框,我使用sudo apt-get clean导入,其中两列是日期('StartDate'和'EndDate'),日期格式为dd / mm / yyyy。另一栏包含可能的每日价格('价格')。

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

read_csv()

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

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

一旦我在间隔中有这个天数,如何计算加权平均值?

2 个答案:

答案 0 :(得分:2)

您可以将dayfirst=True传递给to_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

答案 1 :(得分:1)

import datetime, pandas as pd, numpy as np
  1. 首先,定义csv中的日期格式
  2. dateparse = lambda x: pd.datetime.strptime(x, '%d/%m/%Y')
    
    1. 然后阅读并指定日期列
    2. df = pd.read_csv("file.csv", parse_dates=['DateStart','DateEnd'], date_parser=dateparse)
      
      1. 这是你的结果:
      2. number_of_days = ( (df.DateEnd - df.DateStart + datetime.timedelta(1) ) / np.timedelta64(1, 'D'))
        
        result = ( number_of_days * df.Price ).sum() / number_of_days.sum()
        
        print result