在此数据框中...
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)
})
...看起来笨拙。
有更好的方法吗?
答案 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}