Дублируйте и идентифицируйте определенные строки в кадре данных Pandas - PullRequest
0 голосов
/ 27 сентября 2019

Я хочу идентифицировать и продублировать с помощью регулярных выражений определенные строки моего DataFrame.

Например, мой df:

   var1  
0  House A and B 
1  2 garage + garden 
2  fridges

Результат, который я хочу получить в var2 (сохраняю также и мою var1):

   var1                  var2
0  House A and B         House A
1  House A and B         House B
2  2 garage + garden     Garage 1
3  2 garage + garden     Garage 2
4  2 garage + garden     Garden
5  fridges               fridge 1
6  fridges               fridge 2

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

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 30 сентября 2019

Ваша проблема очень широка, поэтому вот небольшая помощь в вашем первом сценарии:

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.Но так как ваш образец, вероятно, довольно неполный, это, по крайней мере, должно быть надежным.Вы можете использовать эту же логику для извлечения искомой информации из других шаблонов.

...