2016-02-26 48 views
0

我有200列以上的时间序列数据。目前我正在将每列正常化为[0,1]范围内的df.apply(lambda x: (x-x.min())/(x.max()-x.min()))。然而这还不够。我还希望让每列在其自己的范围内归一化(例如,第1列:[0,1],第2列:[1,2],第3列:[2,3]等)。我怎样才能做到这一点?有没有一种方法让lambda函数获得所调用列的索引(我在文档中找不到这样的内容)?索引特定列标准化

+0

如果你使用Python 3,它不会很难与lambda来代替用'def'使用'nonlocal'访问父函数中的变量的定义函数,每次调用它时都会增加。 – Kupiakos

+0

这是一种可能性。谢谢。不过,我希望这样做有一种更习惯的方式。 –

回答

0

为什么不这样做呢?

df = df.apply(lambda x: (x-x.min())/(x.max()-x.min())) 
for ix, col in enumerate(df.columns.values): 
    df[col] = df[col]+ix 

这是不是令人难以置信的漂亮,但同样功能的另一条路线:

df = df.apply(lambda x: (x-x.min())/(x.max()-x.min())) 
df += pd.DataFrame([range(len(df.columns.values))]*len(df.index),columns=df.columns.values) 
+0

我猜如果没有习惯做我需要的方式,这将工作。 –

+0

新增了第二种方法。它仍然不是单行的,但我认为值得从不同角度思考问题。 –