2017-05-03 163 views
2

我有一個的大數據幀看起來爲:比大熊貓一些更大的替換值數據幀

df1['A'].ix[1:3] 
2017-01-01 02:00:00 [33, 34, 39] 
2017-01-01 03:00:00 [3, 43, 9] 

我想和11

因此,所期望的輸出,以取代每個元素大於9上面的例子是:

df1['A'].ix[1:3] 
2017-01-01 02:00:00 [11, 11, 11] 
2017-01-01 03:00:00 [3, 11, 9] 

編輯:

我的實際數據幀有大約20,000行和每行都有大小爲2000的列表。

有沒有一種方法可以爲每行使用numpy.minimum函數?我認爲它會比list comprehension方法更快?

回答

4

您可以使用applylist comprehension

df1['A'] = df1['A'].apply(lambda x: [y if y <= 9 else 11 for y in x]) 
print (df1) 
           A 
2017-01-01 02:00:00 [11, 11, 11] 
2017-01-01 03:00:00 [3, 11, 9] 

更快的解決方案是先轉換爲numpy array然後用numpy.where

a = np.array(df1['A'].values.tolist()) 
print (a) 
[[33 34 39] 
[ 3 43 9]] 

df1['A'] = np.where(a > 9, 11, a).tolist() 
print (df1) 
           A 
2017-01-01 02:00:00 [11, 11, 11] 
2017-01-01 03:00:00 [3, 11, 9] 
+0

,因爲有數據幀是非常大的,我希望可以用numpy的。每行的最小函數還是速度會相同? – Zanam

+0

列表中總是有'3'值? – jezrael

+0

用真實的數據信息編輯問題 – Zanam