2017-03-16 99 views
2

給定具有兩個唯一值的系列,以元素相反的值獲取系列的最有效方法是什麼?這裏有一個例子:從具有兩個唯一值的熊貓系列返回相反值

ser = pd.Series(['a', 'b', 'a']) 

我要尋找一個功能被應用到ser,返回:

0 b 
1 a 
2 b 

編輯:此外,如何將溶液中ammended如果存在空值。也就是說,如果

ser = pd.Series(['a', 'b', np.nan , 'a']) 

,我們想獲得:

0 b 
1 a 
2 np.nan 
3 b 

回答

3

使用numpy.unique可以得到一個方便的逆數組。

v = ser.values 
u, i = np.unique(v, return_inverse=True) 

如果確實只有2個唯一值,那麼您可以這樣做。

pd.Series(u[1 - i], ser.index) 

0 b 
1 a 
2 b 
dtype: object 

如何使用

逆陣的目的是讓你重新創建傳遞的數組,v在我們的情況下,通過與我們的反i切片唯一值u。由於u只有2個值,因此這些值將是01。所以當我們切片u[i]時,我們得到array(['a', 'b', 'a'], dtype=object)。但是,我們可以得到相反u[1 - i]產量array(['b', 'a', 'b'], dtype=object)

+0

有可能的方式來調整NaN的?正如我在編輯 – splinter

+0

@splinter中所添加的那樣,這會成爲另一個問題。 – piRSquared

3

您可以通過元素的系列使用做一個元素的運用:

代碼:

ser = pd.Series(['a', 'b', 'a']) 
print(ser.apply(lambda x: 'a' if x == 'b' else 'b')) 

結果:

0 b 
1 a 
2 b 
dtype: object 
+1

你會得到我的投票+1 – piRSquared