如何在Python中按偶数/奇数列更改列名

时间:2019-05-16 14:25:28

标签: python python-3.x pandas

我有一个相对较大的数据框,其中包含一百多列。当前,只有第一列被分配了名称,数据框如下所示:

Event 0 1 2 3 4 5 6 7 8 9 10 11 ...

我想重命名列,使它们看起来像

Event Name1 Job1 Name2 Job2 Name3 Job3 Name4 Job4 Name5 Job5 Name6 Job6 ...

基本上,对于偶数列,名称将变为Name(number / 2 + 1),对于奇数列,名称将变为Job((number + 1)/ 2 + 1)。

有一个类似的问题(generating column names iteratively in pandas),我按照他们的方法首先提取了奇数列,然后分配了数字,但是代码并没有真正起作用。

我想知道应该怎么做?

3 个答案:

答案 0 :(得分:1)

这里是另一个示例:

import pandas as pd

a = {}
a["Event"] = [1,2,3]
a[0] = [1,2,3]
a[1] = [1,2,3]
a[2] = [1,2,3]
a[3] = [1,2,3]
a[4] = [1,2,3]

df = pd.DataFrame(a)

name = 1
job = 1

for i in df.keys()[1:]:
    if i%2==0:
        df = df.rename(columns={i: "Name"+str(name)})
        name+=1
    else:
        df = df.rename(columns={i: "Job"+str(job)})
        job+=1

print(df)
   Event  Name1  Job1  Name2  Job2  Name3
0      1      1     1      1     1      1
1      2      2     2      2     2      2
2      3      3     3      3     3      3

答案 1 :(得分:0)

我们必须做三件事:

  1. 获取当前list的{​​{1}}。
  2. 使用第1步中获得的columns创建新的list
  3. 将新的list分配给我们list的{​​{1}}。

1:

columns

2:

DataFrame

3:

In [1]: import pandas as pd
In [2]: df = pd.DataFrame(columns=['Event', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'])
In [3]: df
Out[3]:
Empty DataFrame
Columns: [Event, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
Index: []

答案 2 :(得分:0)

如何使用2个listcomp和zipfrom_iterable来展平zip

from itertools import chain

num_cols = 20
name = ['Name'+str(i) for i in range(1, num_cols)]
job = ['Job'+str(i)  for i in range(1, num_cols )]

df.columns = ['Event'] + list(chain.from_iterable(zip(name, job)))

Out[1918]:
['Event',
 'Name1',
 'Job1',
 'Name2',
 'Job2',
 'Name3',
 'Job3',
 'Name4',
 'Job4',
 'Name5',
 'Job5',
 'Name6',
 'Job6',
 'Name7',
 'Job7',
 'Name8',
 'Job8',
 'Name9',
 'Job9',
 'Name10',
 'Job10',
 'Name11',
 'Job11',
 'Name12',
 'Job12',
 'Name13',
 'Job13',
 'Name14',
 'Job14',
 'Name15',
 'Job15',
 'Name16',
 'Job16',
 'Name17',
 'Job17',
 'Name18',
 'Job18',
 'Name19',
 'Job19']