在DataFrame中使用regex和panda来替换该值


import pandas as pd
import re
regexdf_data = {
'STag': ['Title_1', 'Abs_1', 'Abs_3', 'Abs_4'],
'E1': ['pacnes', 'acne|dfe|sac', 'pI', 'kera'],
'E1_CUI': ['C3477', 'C2166', 'C9871', 'C2567']
}
df3 = pd.DataFrame(regexdf_data)
df3
E1             E1_CUI    STag
0   pacnes         C3477     Title_1
1   acne|dfe|sac   C2166     Abs_1
2   pI             C9871     Abs_3
3   kera           C2567     Abs_4

现在,当对应行的STag列中有Abs_1值时,我只想要来自痤疮的痤疮|dfe|sac值的E1列,而不是E1_CUI列的C2166。

我试过这个df3.loc[df3['STag'] == 'Abs_1', 'E1_CUI'] = re.split("|",df3['E1']),但不起作用。

Expected Output
E1             E1_CUI    STag
0   pacnes         C3477     Title_1
1   acne|dfe|sac   acne      Abs_1
2   pI             C9871     Abs_3
3   kera           C2567     Abs_4

尝试使用带split的字符串访问器和第一个元素的get快捷方式(@ShubhamSharma的改进(:

import pandas as pd
regexdf_data = {
'STag': ['Title_1', 'Abs_1', 'Abs_3', 'Abs_4'],
'E1': ['pacnes', 'acne|dfe|sac', 'pI', 'kera'],
'E1_CUI': ['C3477', 'C2166', 'C9871', 'C2567']
}
df3 = pd.DataFrame(regexdf_data)
m = df3['STag'] == 'Abs_1'
df3.loc[m, 'E1_CUI'] = df3.loc[m, 'E1'].str.split('|').str[0]

输出:

print(df3)
STag            E1 E1_CUI
0  Title_1        pacnes  C3477
1    Abs_1  acne|dfe|sac   acne
2    Abs_3            pI  C9871
3    Abs_4          kera  C2567

最新更新