【问题标题】:string replace in pandas熊猫中的字符串替换
【发布时间】:2019-06-03 18:56:08
【问题描述】:

我有一个 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

我尝试使用 rsplit 、 df.replace 、 Series.str.extract 但没有运气。我将非常感谢任何帮助。

【问题讨论】:

    标签: python regex pandas replace


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      或者在一行中使用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
      >>> 
      

      【讨论】:

        猜你喜欢
        • 2017-03-12
        • 2019-11-23
        • 2019-02-06
        • 1970-01-01
        • 2021-09-07
        • 2019-09-21
        • 2018-08-01
        • 1970-01-01
        相关资源
        最近更新 更多