两个日期列之间的Pandas AVG()函数

时间:2017-02-10 17:19:24

标签: python pandas

有这样的df:

  Client  Status Dat_Start   Dat_End
   1       A     2015-01-01  2015-01-19 
   1       B     2016-01-01  2016-02-02
   1       A     2015-02-12  2015-02-20
   1       B     2016-01-30  2016-03-01

我想在两个日期(Dat_end和Dat_Start)之间获得平均值,使用Pandas语法按客户端列分组Status ='A'。

所以它会像SQL一样:

Select Client, AVG (Dat_end-Dat_Start) as Date_Diff 
from Table
where Status='A'
Group by Client

谢谢!

2 个答案:

答案 0 :(得分:2)

计算timedeltas:

df['duration'] = df.Dat_End-df.Dat_Start

df
Out[92]: 
   Client Status  Dat_Start    Dat_End  duration
0       1      A 2015-01-01 2015-01-19   18 days
1       1      B 2016-01-01 2016-02-02   32 days
2       1      A 2015-02-12 2015-02-20    8 days
3       1      B 2016-01-30 2016-03-01   31 days

过滤并询问pandas的总和和计数< 0.20:

df[df.Status=='A'].groupby('Client').duration.agg(['sum', 'count'])
Out[98]: 
           sum  count
Client               
1      26 days      2

对于即将推出的pandas 0.20,请参阅groupby here为timedeltas添加的平均值。这将有效:

df[df.Status=='A'].groupby('Client').duration.mean()

答案 1 :(得分:2)

In [10]: df.loc[df.Status == 'A'].groupby('Client') \
           .apply(lambda x: (x.Dat_End-x.Dat_Start).mean()).reset_index()
Out[10]:
   Client       0
0       1 13 days