Ваша проблема очень широка, поэтому вот небольшая помощь в вашем первом сценарии:
import re
import pandas as pd
var1 = pd.DataFrame(['House A and B'], columns=['var1'])
new_df = pd.DataFrame(columns=['var1','var2'])
for idx,string in enumerate(var1):
if re.search(r'\band\b',var1.iloc[idx][0]):
df_aux = pd.DataFrame(var1.iloc[idx].repeat(2).reset_index(drop=True))
df_aux.columns=['var1']
new_df = new_df.append(df_aux, sort=True)
last_letter = re.search(r'and.(\w+).*', var1.iloc[idx][0]).group(1)
first_letter =re.search(r'(\w+).and.*', var1.iloc[idx][0]).group(1)
trimmed_string = re.search(r'(\w+) .*', var1.iloc[idx][0]).group(1)
new_df.var2.iloc[-2] = trimmed_string + ' ' + first_letter
new_df.var2.iloc[-1] = trimmed_string + ' ' + last_letter
Вывод:
var1 var2
0 House A and B House A
1 House A and B House B
Это будет очень неэффективно на больших наборах данных из-задве причины: regex
медленный, и вы должны стараться избегать как можно большего количества циклов через DataFrame.Но так как ваш образец, вероятно, довольно неполный, это, по крайней мере, должно быть надежным.Вы можете использовать эту же логику для извлечения искомой информации из других шаблонов.