交换由分隔符分隔的最后2列列

我有一个数据框。如果倒数第二个字符串是“pi”,我想交换由“_”分隔的最后两个列字符串

数据框具有如下列:

     abc_rte        abc_rte_log     abc_rte_log_pi1     abc_rte_pi1_log     xyz_pnct_pi2_log

所需的列名:

      abc_rte       abc_rte_log     abc_rte_log_pi1     abc_rte_log_pi1     xyz_pnct_log_pi2    

到目前为止我尝试过的:

        for i in range(0, len(df.columns)):
          if str(df.columns[i].split('_')[-2] == 'pi':
            df.columns[i].split('_')[-2] = str(df.columns[i].split('_')[-1])

回答

Index.str.replace

df.columns = df.columns.str.replace(r'(pid*)_([^_]+)$', r'2_1')

>>> df.columns

Index(['abc_rte', 'abc_rte_log', 'abc_rte_log_pi1', 'abc_rte_log_pi1',
       'xyz_pnct_log_pi2'],
      dtype='object')

正则表达式详细信息:

  • (pid*) : 第一个捕获组
    • pi:pi逐字匹配字符
    • d* : 匹配零次或多次之间的数字
  • _ : 匹配字符 _
  • ([^_]+) : 第二个捕获组
    • [^_]+: 匹配列表中不存在的任何字符[_]一次或多次
  • $ : 断言行尾的位置

看网上 regex demo


以上是交换由分隔符分隔的最后2列列的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>