2017-01-17 5 views
1

У меня есть такие, что DFпанды поиск подстрок через несколько столбцов

 c_name f_name 
0  abc  abc12 
1  xyz  abc1 
2  mnq  mnq2 

Целью является найти подстроку через две колонки знать, какой столбец она принадлежит. Предпочтение должно быть c_name, как и в случае, если подстрока в обоих столбцах, то c_name получает приоритет Для, например: если я искать abc в приведенном выше dataframe я должен каким-то образом получить строку 0 abc для c_name и строки 1 abc1 для f_name.

Чтобы решить эту проблему, я начал с df[df['c_name'].str.contains('abc', case=False)] , который даст мне результаты для c_name. Теперь вопрос заключается в том, как исключить строки, в которых у меня уже есть результаты от выполнения той же операции по f_name. Любая помощь очень ценится!

ответ

1
import pandas as pd 
row =[['abcx','abcy'], 
     ['efg','abcz'], 
     ['higj','UK']] 
df= pd.DataFrame(row) 
df.columns = ['c_name', 'f_name'] 

print df[df['c_name'].str.contains('abc', case=False)] 

delta_df =df[~df['c_name'].str.contains('abc', case=False)] 
print delta_df[delta_df['f_name'].str.contains('abc', case=False)] 

выход

c_name f_name 
0 abcx abcy 
    c_name f_name 
1 efg abcz 
0

Отметьте свой первый результат поиска примерно как 2. Это будет отменено (на 1), если встретится новый результат поиска.

+0

как вопрос :) Я знаю, что делать, я просто не знаю, как это сделать так как я не владею пандами – Fizi

1
  • stack в серию
  • str.contains, чтобы получить значение истинности подстрока
  • unstack вернуться dataframe
  • результаты подмножества, чтобы обеспечить по меньшей мере один матч
  • idxmax(1) получает первый True в колонках

def find_subtext(df, txt): 
    contains = df.stack().str.contains(txt).unstack() 
    return contains[contains.any(1)].idxmax(1) 

find_subtext(df, 'abc') 

0 c_name 
1 f_name 
dtype: object 

df.assign(abc=find_subtext(df, 'abc')) 

    c_name f_name  abc 
0 abc abc12 c_name 
1 xyz abc1 f_name 
2 mnq mnq2  NaN 
+0

Я всегда могу полагаться на вас, чтобы пройти через w с ответом :) Большое спасибо. Его интересный подход – Fizi

Смежные вопросы