Zasadniczo chcę nauczyć się szybszego sposobu na cięcie ramki danych Pandy za pomocą warunkowego podziału na podstawie wyrażenia regularnego. Na przykład następujące df (nie więcej niż 4 różnice w string_column są jedynie w celach poglądowych)Krojenie wierszy Pandy z ciągami dopasowanymi powoli
index, string_col1, string_col2, value
0, 'apple', 'this', 10
1, 'pen', 'is', 123
2, 'pineapple', 'sparta', 20
3, 'pen pineapple apple pen', 'this', 234
4, 'apple', 'is', 212
5, 'pen', 'sparta', 50
6, 'pineapple', 'this', 69
7, 'pen pineapple apple pen', 'is', 79
8, 'apple pen', 'sparta again', 78
...
100000, 'pen pineapple apple pen', 'this is sparta', 392
trzeba zrobić logiczną segmentację warunkowego według string_column za pomocą wyrażenia regularnego przy poszukiwaniu wskaźników z minimalnym i maksimum w kolumnie wartości, a następnie w końcu znalezienie różnicy między wartością minimalną i maksymalną. Robię to w następujący sposób, ale to SUPER SLOW kiedy trzeba dopasować różne wzory regex:
pat1 = re.compile('apple')
pat2 = re.compile('sparta')
mask = (df['string_col1'].str.contains(pat1)) & (df['string_col2'].str.contains(pat2))
max_idx = df[mask].idxmax()
min_idx = df[mask].idxmin()
difference = df['value'].loc[max_idx] - df['value'].loc[min_idx]
myślę, aby uzyskać jeden „różnicy” odpowiedź, ja krojenie DF zbyt wiele razy, ale Nie mogę wymyślić, jak to zrobić mniej. Co więcej, czy istnieje szybszy sposób na podzielenie go?
To jest pytanie optymalizacyjne, ponieważ wiem, że mój kod zapewnia mi to, czego potrzebuję. Wszelkie wskazówki zostaną docenione!
Można połączyć wyrażenie regularne w pojedyncze wyrażenie, a następnie maska jest prawdopodobnie szybsza. patX = re.compile ('(apple | sprata)'). Czy to przyspiesza? Dodatkowo, tworzenie maski nad całą ramką DataFrame w celu uzyskania pierwszego indeksu może nie być najszybsze. –
Muszę wykonać dwa oddzielne sprawdzenia regex dla dwóch różnych wzorów dla dwóch różnych kolumn, więc nie jestem pewien, czy łączenie ich w jedno wyrażenie regularne i dopasowanie w dwóch kolumnach jest dobrym pomysłem. –
Wygląda bardzo podobnie do https://stackoverflow.com/questions/40183800/pandas-difference-between-lubgest-and-smallest-value-within-group –