заменить строку в пандах - PullRequest
0 голосов
/ 09 января 2019

У меня есть фрейм данных Pandas, в котором есть некоторые уравнения регрессии, с терминами смещения в конце каждого уравнения. (+250, -150, +450, +250)

ДФ:

    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, но безуспешно. Я был бы очень признателен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Или используйте 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
>>> 
0 голосов
/ 09 января 2019

Используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...