熊猫中的字符串替换

时间:2019-01-09 03:03:58

标签: python regex pandas replace

我有一个pandas数据框,其中包含一些回归方程式,每个方程式的末尾都有偏差项。 (+250,-150,+ 450,+ 250)

df:

    a           b
0   [TC100]+250 [TC200]-150
1   [FC100]+450 [FC200]+250

我想替换偏置项[具体来说,是每个等式中字符]的最后一次出现之后出现的任何情况]。替换字符串应基于相应的列名。所需的输出如下

输出:

    a           b
0   [TC100]+a1  [TC200]+b1
1   [FC100]+a2  [FC200]+b2

我尝试使用rsplitdf.replaceSeries.str.extract,但是没有运气。我将不胜感激。

2 个答案:

答案 0 :(得分:1)

使用split并重新构建每个单元格的str

s1=df.apply(lambda x : x.str.split(']',expand=True)[0])
df.astype(bool)
      a     b
0  True  True
1  True  True
s2=df.astype(bool)
s=s1+']+'+s2*s2.columns+(s2.T*(np.arange(len(df))+1).astype(str)).T
s
            a           b
0  [TC100]+a1  [TC200]+b1
1  [FC100]+a2  [FC200]+b2

答案 1 :(得分:1)

或在一行中使用apply(很长):

>>> df.apply(lambda x: x.str.split(']',expand=True)[0]+']+'+df.columns[df.isin([x[0]]).any()].item()+str(df[df.columns[df.isin([x[0]]).any()].item()].tolist().index(x[0])+1),axis=1)
            a           b
0  [TC100]+a1  [TC200]+a1
1  [FC100]+a2  [FC200]+a2
>>>