У меня есть датафрейм со строками, названными как:

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.

Я изо всех сил пытаюсь придумать способ сделать это. Я был бы очень признателен за любые идеи, которые люди могут иметь. Спасибо

1
Allentro 24 Июн 2019 в 17:46

3 ответа

Лучший ответ

Разделите ваши имена файлов и затем проверьте 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.

2
user3483203 24 Июн 2019 в 14:52

Исходя из того, что вы пытаетесь отфильтровать, вот мое предложение / или решение. Дайте мне знать, если это работает. Я попробовал это, и это работает для меня.

«»»

 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
0
Vishwas 24 Июн 2019 в 15:10

Вам нужно разделить с помощью ., а затем взять строки, начинающиеся с L.

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

Выход:

2    rp021048.L00
3    rp021048.L01
Name: 0, dtype: object
2
harvpan 24 Июн 2019 в 14:54