获取特定日期的标准差

时间:2018-11-26 09:16:32

标签: pandas

在此数据框中...

this.authService
            .signInByLogin(this.form.controls['login'].value, this.form.controls['password'].value).subscribe(...)

如何获取特定天数中每个“猫”值的标准差的字典-从大型数据集的最后一天开始?

此代码给出10天的标准偏差...

import pandas as pd
import numpy as np
import datetime

tf = 365
dt = datetime.datetime.now()-datetime.timedelta(days=365)

df = pd.DataFrame({
        'Cat': np.repeat(['a', 'b', 'c'], tf),
        'Date': np.tile(pd.date_range(dt, periods=tf), 3),
        'Val': np.random.rand(3*tf)
})

...看起来笨拙。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

首先按boolean indexing进行过滤,然后汇总std,但是由于必须使用默认值ddof=1,请将其设置为0

d1 = df[(df.Date>dt-datetime.timedelta(days=10))].groupby('Cat')['Val'].std(ddof=0).to_dict()
print (d1)
{'a': 0.28435695432581953, 'b': 0.2908486860242955, 'c': 0.2995981283031974}

另一种解决方案是使用自定义功能:

f = lambda x: np.std(x.loc[(x.Date > dt-datetime.timedelta(days=10)), 'Val'])
d2 = df.groupby('Cat').apply(f).to_dict()

解决方案之间的差异是,如果组中的某些值不匹配,则将其删除,并为第二个解决方案分配NaN

d1 = {'b': 0.2908486860242955, 'c': 0.2995981283031974}

d2 = {'a': nan, 'b': 0.2908486860242955, 'c': 0.2995981283031974}