2015-06-25 40 views
0

我需要獲取具有唯一值的行號x。我來到以下解決方案:獲取列(熊貓)中唯一值的索引

x = pv.index.get_level_values("Код") #get index level values 
dups = x[x.duplicated()].unique() #get dup. values 
uniques = x[~x.isin(dups)] #get not dup. values 
uniques_indexes = np.where(x.isin(uniques))[0].tolist() 

我認爲有太多的計算。有沒有更好的解決方案?

回答

1
import pandas as pd 
import numpy as np 

np.random.seed(100) 
index = np.random.choice('A B C D E F G'.split(), 10) 
pv = pd.DataFrame(np.random.randn(10), index=index, columns=['value']) 

Out[60]: 
    value 
A -0.2347 
A -1.4397 
D 0.4328 
A 2.3045 
C -0.1226 
G 0.0155 
E 0.2660 
C -0.1138 
F 1.0111 
C -1.4408 

# reset_index first to preserve the line number 
pv.reset_index(inplace=True) 

Out[128]: 
    index value 
0  A -0.2347 
1  A -1.4397 
2  D 0.4328 
3  A 2.3045 
4  C -0.1226 
5  G 0.0155 
6  E 0.2660 
7  C -0.1138 
8  F 1.0111 
9  C -1.4408 

# replace your groupby index level 
pv.sort_index().groupby('index').filter(lambda group: len(group) == 1) 


Out[129]: 
    index value 
2  D 0.4328 
5  G 0.0155 
6  E 0.2660 
8  F 1.0111 
+0

但我需要原始數據幀中的行號,而不是新的過濾數據幀。 (然後我會在Excel中修飾這些行) – Winand

+0

剛剛修改(添加'reset_index'步驟)以保留行號。 –

+0

謝謝! 'pv.reset_index()。groupby(「Код」)。filter(lambda g:len(g)== 1).index.values'返回numpy數組 – Winand