我是新来的,在经过大量研究后,未能破解这个。
我的列表看起来有点像这样:
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值。
再次感谢!
答案 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'%