我有一個包含數字和限定符(>、<、<=...)的字串的資料框。我想在 2 個新列中提取數值和限定符字串。例外:當初始字串是一個范圍時,我想提取該范圍內的最大值。
請看下面我的例子:
| ID | initial_value | qualifier | num_value |
|-------- |---------------|-----------|-----------|
| Sample1 | 25.5 |= | 25.5 |
| Sample2 | = 25.5 |= | 25.5 |
| Sample3 | >35.5 |> | 35.5 |
| Sample4 | > 45.5 |> | 45.5 |
| Sample5 | <=55.5 |<= | 55.5 |
| Sample6 | <= 65.5 |<= | 65.5 |
| Sample7 | >>55.5 |>> | 55.5 |
| Sample8 | 25.0-75.0 |- | 75.0 |
| Sample9 | 25.0 - 75.0 |- | 75.0 |
在此先非常感謝您的幫助。
干杯
uj5u.com熱心網友回復:
使用PyPi'sregex模塊,您可以使用
(?(DEFINE)
(?<v>\d (?:\.\d )?)
(?<q>[-=<>] )
)
(?|
(?&v)\s*(?P<qualifier>-)\s*(?P<value>(?&v))
|
(?P<qualifier>(?&q))?\s*(?P<value>(?&v))
)
在 regex101.com 上查看演示。
uj5u.com熱心網友回復:
您可以使用([^\s\d.] )?\s*([\d.] )$正則運算式和fillna:
df[['qualifier', 'num_value']] = df['initial_value'].str.extract('([^\s\d.] )?\s*([\d.] )$').fillna('=')
輸出:
ID initial_value qualifier num_value
0 Sample1 25.5 = 25.5
1 Sample2 = 25.5 = 25.5
2 Sample3 >35.5 > 35.5
3 Sample4 > 45.5 > 45.5
4 Sample5 <=55.5 <= 55.5
5 Sample6 <= 65.5 <= 65.5
6 Sample7 >>55.5 >> 55.5
7 Sample8 25.0-75.0 - 75.0
8 Sample9 25.0 - 75.0 - 75.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/347948.html
上一篇:如何使用pythoncsv中的excel列在多個引數中創建if陳述句
下一篇:在資料框中跨行查找t置信區間
