我基本上想學習更快的方式來切片基於正則表達式的條件切片熊貓數據框。例如,下面的DF(有一個在string_column超過4個變型中,它們僅用於說明的目的):切片與字符串匹配的熊貓行緩慢
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
我有根據使用的正則表達式的string_column做布爾條件切片,而發現具有最小的指數並在值列中輸入最大值,然後最後找到最小值和最大值之間的差值。我這樣做是通過下面的方法,但它是超慢的時候我一定要搭配很多不同的正則表達式模式:
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]
我想獲得一個「差」的答案,我切了DF過很多次,但我無法弄清楚如何少做。此外,還有更快的方法來切片嗎?
這是一個優化問題,因爲我知道我的代碼得到我所需要的。任何提示將不勝感激!
可以將正則表達式組合成一個正則表達式,然後掩碼可能會更快。 patX = re.compile( '(蘋果| sprata)')。這是否使它更快?另外,在整個DataFrame上製作一個掩碼來獲取第一個索引可能不是最快的。 –
我需要爲兩個不同的列進行兩種不同的模式檢查,所以我不確定將它們組合成一個正則表達式,並且跨兩列匹配是個不錯的主意。 –
看起來非常類似於https://stackoverflow.com/questions/40183800/pandas-difference-between-largest-and-smallest-value-within-group –