2014-12-05 36 views
1

征收的阈值上的数据帧中我有下面的代码:在熊猫

t = 12 
s = numpy.array(df.Array.tolist()) 
s[s<t] = 0 
thresh = numpy.where(s>0, s-t, 0) 
df['NewArray'] = list(thresh) 

,而它的工作原理,想必一定有这样做的更大熊猫般的方式。

编辑:
df.Array.head()看起来是这样的:

0 [0.771511552006, 0.771515476223, 0.77143569165... 
1 [3.66720695274, 3.66722560562, 3.66684636758, ... 
2 [2.3047433839, 2.30475510675, 2.30451676559, 2... 
3 [0.999991522708, 0.999996609066, 0.99989319662... 
4 [1.11132718786, 1.11133284052, 0.999679589875,... 
Name: Array, dtype: object 
+0

哪一位具体你问WRT为'pandas'?我认为''df ['NewArray'] = np.where(df ['Array'] <12,0,df ['Array'] - 12)'将在单个班轮内完成 – EdChum 2014-12-05 16:43:30

+0

整个变形为numpy和列表,然后再回来似乎很奇怪。 – kasperhj 2014-12-05 16:56:26

+0

那么我的评论应该显示它完全没有必要 – EdChum 2014-12-05 17:01:25

回答

2

IIUC你可以简单的减法,用clip_lower

In [29]: df["NewArray"] = (df["Array"] - 12).clip_lower(0) 

In [30]: df 
Out[30]: 
    Array NewArray 
0  10   0 
1  11   0 
2  12   0 
3  13   1 
4  14   2 
+0

我得到这个错误:'不支持的操作数类型为 - :'list'和'float'',因为'df ['Array']'是一个列表。 – kasperhj 2014-12-05 17:10:00

+0

'df [“Array”]'如何成为一个列表?是不是'df'是'DataFrame',所以'df [“Array”]'是'Series'? – DSM 2014-12-05 17:11:27

+0

我不知道如何,我只是假设它是基于错误消息。也许这是因为'df ['Array']'被解释为一个对象。 'df ['Array']'是一个数组列表,例如'df ['Array'] [0]'返回一个列表。 – kasperhj 2014-12-05 17:12:58