我有以下数据框:
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”)。然后获取一个子字符串,其中包含每行索引位置之后的所有内容。
编辑:
我已经成功地根据需要获取了“X”的索引位置:
df.['index_pos'] = df['contract'].str.rfind('X', start=0, end=None)
但我似乎仍然无法获得包含“X”后面的所有字符的新列。我正在尝试:
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”列的方法。有什么建议吗?
最佳答案
使用矢量化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
关于python - Pandas 子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33604931/