2017-05-03 165 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