比较列表或数据框中的上一个和下一个值

时间:2016-09-01 07:54:59

标签: python string list pandas

我是新来的,在经过大量研究后,未能破解这个。

我的列表看起来有点像这样:

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

它是现有文件夹的列表,不能更改为更实用的内容。 我还将此列表作为pandas df列以及其他一些值。

目标是具有" -2"," -3"," - #"仅使用具有最大值的元素。这些" - #"价值可以达到10。

上面列表中的结果是:

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

非常感谢您的帮助!

更新

John Zwinck的答案正在为这些名单而努力。但是,当我尝试在pandas数据帧上使用它时,它会给我带来错误。因此,重新构建我的问题可能会更有帮助:

我的Dataframe看起来像这样:

   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值。

再次感谢!

2 个答案:

答案 0 :(得分: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']

答案 1 :(得分:1)

这是不是最好的答案,我认为性能不佳但是如果有人需要纯python而没有任何模块或使用Cython(类型变量),这可能会有所帮助:

'bla'%