我不明白“Lambda'”的使用情况。和'变换'并从此代码(熊猫文档)

时间:2016-10-24 20:21:35

标签: pandas lambda transform

我正在搜索pandas文档,试图了解如何使用转换,并且可以从文档中获取此示例: http://pandas.pydata.org/pandas-docs/stable/groupby.html(根据'转型")

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt



index = pd.date_range('10/1/1999', periods=1100)
ts = pd.Series(np.random.normal(0.5, 2, 1100), index)

ts = ts.rolling(window=100,min_periods=100).mean().dropna()
key = lambda x: x.year

zscore = lambda x: (x - x.mean()) / x.std()


transformed = ts.groupby(key).transform(zscore)

我很困惑的一些事情;首先使用lambda。

key = lambda x: x.year

在这种情况下x应该代表什么数据类型?我不确定哪种数据类型允许调用属性" .year"

至于这种情况:

zscore = lambda x: (x - x.mean()) / x.std()

x将代表ts的每一行(ts.roll?)和x.mean是什么的平均值?

最后,变换究竟在最后一行做了什么? 它只是用zscore替换ts的值吗? 我运行变量"转换"但索引(日期)与ts'相同。指数。那么groupby(key)究竟做了什么呢?

谢谢!

1 个答案:

答案 0 :(得分:3)

使用key = lambda x: x.year表示您的索引为dtype='datetime64[ns]'

这将调用每个索引的年份并按年份对df进行分组。

现在你有了一个groupby对象,你可以转换每个组:

zscore = lambda x: (x - x.mean()) / x.std()

将每个组(即每年)计算平均值(x.mean()),标准偏差(x.std())并为每个数据点应用公式(x - x.mean()) / x.std()。< / p>

这样做:

 ts.groupby(key).mean()
Out[274]: 
2000   0.4851
2001   0.2568
2002   0.4544

返回每年的平均值,并执行此操作:

ts.groupby(key).std()
Out[275]: 
2000   0.1969
2001   0.1539
2002   0.1881

返回每年的标准差

transform将把它应用于每一行,所以让我们使用位置1进行测试

ts.head()
Out[277]: 
2000-01-08   0.7562
2000-01-09   0.7639
2000-01-10   0.7020
2000-01-11   0.6970
2000-01-12   0.6906

由于第一个指数是2000年,我们需要使用该组的均值和标准,如:0.7562-0.4851 /0.1969 = 1.3767

ts.groupby(key).transform(zscore).head(2)
Out[282]: 
2000-01-08   1.3767
2000-01-09   1.4159