交换由分隔符分隔的最后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