2016-09-01 72 views
0

我在這裏是新手,經過大量研究後,無法破解這一個。比較列表中或數據框中的上一個值和下一個值

我的列表看起來有點像這樣:

lister=["AB1","AB2","AB3","AB3-2","AB3-3","AB3-4","AB4","AB4-2","AB5"] 

它是現有文件夾列表,並且不能更改爲更實用。 我也有這個列表作爲熊貓df列以及其他一些值。

目標是具有「-2」,「-3」,「 - #」的元素僅使用具有最大值的元素。這些「 - #」值可以從列表中上升到10

上述判定的結果將是:

resulter=["AB1","AB2","AB3-4","AB4-2","AB5] 

非常感謝您的幫助!

UPDATE:

約翰Zwinck答案是工作列表。但是,當我嘗試在熊貓數據框上使用它時,它會給我帶來錯誤。因此,重新構建我的問題可能更有幫助:

我的數據框看起來是這樣的:

COL1 COL2 COL3 COL4  COL5  COL6 
0 1 77  AB1 0.609856 2.145556 2.115333                                  
1 2 77  AB2 0.603378 2.146333 2.125667                                  
2 3 77  AB3 0.600580 2.150667 2.135000                                 
3 4 89  AB1 0.609129 2.149056 2.097667                                 
4 5 89  AB2 0.604061 2.175333 2.142667                                 
5 6 89  AB3 0.606987 2.139944 2.107333                                 
6 7 89  AB4 0.603696 2.122000 2.102000                                 
7 8 94  AB1 0.606438 2.156444 2.142000                                 
8 9 94 AB1-2 0.611260 2.133556 2.095000                                  
9 10 94  AB2 0.596059 2.169056 2.137333 

我在這種情況下,要求刪除基於COL3(AB1)的值列7,因爲有在第8行存在AB1-2值。

再次感謝!

回答

5
gb = pd.Series(lister).str.split('-', 1, expand=True).groupby(0)[1].last().fillna('') 

爲您提供:

AB1  
AB2  
AB3 4 
AB4 2 
AB5  

然後:

gb.index + np.where(gb, '-' + gb, '') 

爲您提供:

['AB1', 'AB2', 'AB3-4', 'AB4-2', 'AB5'] 
+0

非常感謝。奇蹟般有效!現在進入我的代碼實施... – Mdras

1

不是最好的答案,我認爲有表現不好,但如果有人需要純Python沒有任何模塊或使用用Cython(類型變量),這可能幫助:

lister=["AB1","AB2","AB3","AB3-2","AB3-3","AB3-4","AB4","AB4-2","AB5"] 

resulter = list() 
i=0 
while i< len(lister)-1: 
    if '-' not in lister[i] and '-' not in lister[i+1]: 
     resulter.append(lister[i]) 
    elif '-' not in lister[i] and '-' in lister[i+1]: 
     j=i+1 
     tmp = lister[j] 
     while '-' in tmp and j<len(lister)-1 and lister[i][2] == lister[j+1][2]: 
      j += 1 
      tmp = lister[j] 
     i=j 
     resulter.append(tmp) 
    i+=1 
if lister[-1] not in resulter: 
    resulter.append(lister[-1]) 
print(resulter) 
相關問題