如何根据数据框中的相似行(字符串)删除数据框的某些行

时间:2019-06-24 14:46:20

标签: python string pandas dataframe

我有一个数据行,其行名为:

rp021047.tot
rp021048.tot
rp021048.L00
rp021048.L01
rp021048.tot
rp021049.tot
rp021050.tot
rp022047.tot
rp022048.tot
rp022049.tot
rp022050.tot

主要关注点是以下行:

rp021048.L00
rp021048.L01
rp021048.tot

这些行的名称完全相同,除了该点之后。对于这样的重复项,我只希望保留结尾为.L*的文件,删除.tot行。

我正在努力想办法。我真的很感激人们可能有的任何想法。谢谢

3 个答案:

答案 0 :(得分:2)

分割文件名,然后检查条件duplicated


u = s.str.rsplit('.', 1, expand=True)
m = u.duplicated(0) & u[1].eq('tot')

s[~m]

0     rp021047.tot
1     rp021048.tot
2     rp021048.L00
3     rp021048.L01
5     rp021049.tot
6     rp021050.tot
7     rp022047.tot
8     rp022048.tot
9     rp022049.tot
10    rp022050.tot
dtype: object

此处,行4被删除,因为它是重复的文件名,但扩展名为tot

答案 1 :(得分:2)

您需要使用.进行拆分,然后获取以L开头的行。

outpt.loc[outpt.str.split('.').str[1].str.startswith('L')]

输出:

2    rp021048.L00
3    rp021048.L01
Name: 0, dtype: object

答案 2 :(得分:0)

根据您要过滤的内容,这是我的建议或解决方案。让我知道这个是否奏效。我试过了,对我有用。

'''

 data =['rp021047.tot', 'rp021048.tot', 'rp021048.L00','rp021048.L01',
'rp021048.tot', 'rp021049.tot', 'rp021050.tot','rp022047.tot',
'rp022048.tot','rp022049.tot','rp022050.tot']
df = pd.DataFrame(data)
df.columns =['col1']
df1 = df[(df.col1.str.contains('L'))]
df1

'''

输出

    col1
2   rp021048.L00
3   rp021048.L01