2016-01-28 76 views
2

鑑於以下數據幀中的一個列的值:熊貓分配基於另一

import pandas as pd 
df = pd.DataFrame(
     {'A':[10,20,30,40,50,60], 
     'B':[1,2,1,4,5,4] 
     }) 
df 

    A B 
0 10 1 
1 20 2 
2 30 1 
3 40 4 
4 50 5 
5 60 4 

我想一個新的列「C」具有值等於那些在爲「A」,其中的相應值「B」是小於3,否則爲0 期望的結果如下:

A B C 
0 10 1 10 
1 20 2 20 
2 30 1 30 
3 40 4 0 
4 50 5 0 
5 60 4 0 

提前感謝!

回答

2

使用np.where

df['C'] = np.where(df['B'] < 3, df['A'], 0) 

>>> df 
    A B C 
0 10 1 10 
1 20 2 20 
2 30 1 30 
3 40 4 0 
4 50 5 0 
5 60 4 0 
2

在這裏,你可以使用列pandas方法where直接:

In [3]: 
df['C'] = df['A'].where(df['B'] < 3,0) 
df 

Out[3]: 
    A B C 
0 10 1 10 
1 20 2 20 
2 30 1 30 
3 40 4 0 
4 50 5 0 
5 60 4 0 

時序

In [4]: 
%timeit df['A'].where(df['B'] < 3,0) 
%timeit np.where(df['B'] < 3, df['A'], 0) 

1000 loops, best of 3: 1.4 ms per loop 
1000 loops, best of 3: 407 µs per loop 

np.where是在這裏更快,但大熊貓where正在做更多的檢查,並有更多的選擇,所以這取決於這裏的用例。

+0

謝謝!兩者都是正確的,但哪個更「好」? –

+0

由你決定,這裏的要點是,熊貓有一個內置的方法 – EdChum

+0

增加時間,'np.where'更快,但熊貓方法有更多的選擇,所以它取決於用例 – EdChum