我有一个相对较大的数据框,其中包含一百多列。当前,只有第一列被分配了名称,数据框如下所示:
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),我按照他们的方法首先提取了奇数列,然后分配了数字,但是代码并没有真正起作用。
我想知道应该怎么做?
答案 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)
我们必须做三件事:
list
的{{1}}。columns
创建新的list
。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和zip
和from_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']