pandas 根据df中的句点更改列的名称

yfjy0ee7  于 2022-12-09  发布在  其他
关注(0)|答案(2)|浏览(100)

我有一个df,我想根据句点来更改列的名称。例如,在下面的df中,我有15个名称为v0-14的列。我想将其重命名为v0-v2,在三列之后,我又想将其重命名为v0-v2。由于似乎不能有重复的名称,我将第二组更改为v10-v12。第三组为X1 M3 N1 X等。

df = pd.DataFrame()
df['id'] = [1]
df['v0'] = [2]
df['v1'] = [1]
df['v2'] = [2]
df['v3'] = [1]
df['v4'] = [2]
df['v5'] = [1]
df['v6'] = [2]
df['v7'] = [1]
df['v8'] = [2]
df['v9'] = [1]
df['v10'] = [2]
df['v11'] = [1]
df['v12'] = [2]
df['v13'] = [1]
df['v14'] = [2]
df

这是我想要的输出。提前谢谢你

id   v00 v01 v02 v10 v11 v12 v20 v21 v22 v30 v31 v32 v40 v41 v42
0   1   2   1    2   1   2   1   2   1   2   1   2   1   2   1   2
njthzxwz

njthzxwz1#

您实际上可以有重复的名称:

import numpy as np
df.columns = np.hstack(['id', np.tile(['v0', 'v1', 'v2'], (len(df.columns)-1)//3)])

print(df)

输出量:

id  v0  v1  v2  v0  v1  v2  v0  v1  v2  v0  v1  v2  v0  v1  v2
0   1   2   1   2   1   2   1   2   1   2   1   2   1   2   1   2

对于您的备选方案:

a = np.arange(df.shape[1]-1)
new = np.core.defchararray.add('v', (a%3+a//3*10).astype(str))
df.columns = np.hstack(['id', new])

print(df)

输出量:

id  v0  v1  v2  v10  v11  v12  v20  v21  v22  v30  v31  v32  v40  v41  v42
0   1   2   1   2    1    2    1    2    1    2    1    2    1    2    1    2
替换为str.replace
df.columns = df.columns.str.replace('(\d+)',
                                    lambda m: str((x:=int(m.group()))%3+(x//3*10)),
                                    regex=True)
iklwldmw

iklwldmw2#

您可以用途:

df.rename(columns={f"v{i}": f"v{int(i/3)}"+f"{int(i%3)}" for i in range(len(df.columns))}, inplace=True)

相关问题