2015-11-09 4 views
1

У меня есть следующий dataframe:Панда подстрока

 contract 
0 WTX1518X22 
1 WTX1518X20.5 
2 WTX1518X19 
3 WTX1518X15.5 

Мне нужно, чтобы добавить новый столбец, содержащие все следующие последний «X» из первого столбца. Таким образом, результат будет:

 contract  result 
0 WTX1518X22  22 
1 WTX1518X20.5 20.5 
2 WTX1518X19  19 
3 WTX1518X15.5 15.5 

Так что я полагаю, что я в первую очередь необходимо найти индекс позиции строки последнего «X» (потому что там может быть больше, чем один «X» в строке). Затем получите подстроку, содержащую все, что соответствует этой позиции индекса для каждой строки.

EDIT:

мне удалось получить позицию индекса «X» в соответствии с требованиями:

df.['index_pos'] = df['contract'].str.rfind('X', start=0, end=None) 

Но я до сих пор не могу показаться, чтобы получить новый столбец, содержащий все символы после ' ИКС'. Я пытаюсь:

df['index_pos'] = df['index_pos'].convert_objects(convert_numeric=True) 
df['result'] = df['contract'].str[df['index_pos']:] 

Но это просто дает мне пустой столбец под названием «результат». Это странно, потому что, если я следующий, то он работает правильно:

df['result'] = df['contract'].str[8:] 

Так что я просто нужен способ, чтобы не жёстко «8», но вместо этого использовать столбец «index_pos». Какие-либо предложения?

+0

Я не хочу звучать как перл-фанбой, но вы пробовали регулярное выражение? Что-то простое, как 'df. contract.str.extract (". * X (. *)") 'вероятно, уже работает. – cel

ответ

3

Использование vectorised str.split разбить строку и бросил последний раскол в float:

In [10]: 
df['result'] = df['contract'].str.split('X').str[-1].astype(float) 
df 
​ 
Out[10]: 
     contract result 
0 WTX1518X22 22.0 
1 WTX1518X20.5 20.5 
2 WTX1518X19 19.0 
3 WTX1518X15.5 15.5 
0
import pandas as pd 
import re as re 
df['result'] = df['contract'].map(lambda x:float(re.findall('([0-9\.]+)$',x)[0])) 

Out[34]: 
     contract result 
0 WTX1518X22 22.0 
1 WTX1518X20.5 20.5 
2 WTX1518X19 19.0 
3 WTX1518X15.5 15.5 

Аналогичный подход к одному по EdChump с помощью регулярных выражений, это один только предполагает, что число в конец строки.