2016-02-26 52 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

新增了第二種方法。它仍然不是單行的,但我認爲值得從不同角度思考問題。 –