#python #pandas
#питон #панды
Вопрос:
У меня есть Df с для тестовых образцов, и некоторые из них были переделаны (переделаны), теперь я хочу отфильтровать только оригинальные
col
a
b
a_redo
b_redo
c
d
e
f
g
g_redo
out
col
a
b
g
это код, который я использую для фильтрации только образца повтора (_L _Q _S — это префикс повтора).
sample[sample['col'].str.contains("_L|_Q|_S")]
Ответ №1:
Отфильтруйте только redo
значения по Series.str.endswith
, удалите их по Series.str.replace
, а затем отфильтруйте исходные значения в столбце по Series.isin
:
vals = sample.loc[sample['col'].str.endswith("redo"), 'col'].str.replace('_redo','')
df = sample[sample['col'].isin(vals)]
print (df)
col
0 a
1 b
8 g
С помощью вашей маски:
vals = sample.loc[sample['col'].str.contains("_L|_Q|_S"), 'col'].str.replace("_L|_Q|_S",'')
df = sample[sample['col'].isin(vals)]
Ответ №2:
mask_redo = sample['col'].str.contains("_L|_Q|_S")
mask_orig = - mask_redo
sample_orig = sample.loc[mask_orig]
По сути, помещая знак минус перед маской, которая выбирает строки, содержащие суффиксы повтора, вы инвертируете выделение: теперь у вас есть маска, которая выбирает строки, которые не содержат суффиксов повтора, то есть ваши исходные образцы.