我想在现有列上进行多次索引。以下是例子。
我想为现有的5列提供列名,为另一个现有列提供另一个名称(多索引)
我差不多完成了这个但是当我尝试填充空白文件中的数据时,它会从第1行读取列名,但实际列存在于第2行,因为第一行是为第2行中的实际列定义的列名。您可以找到附加的图像,以了解我想要的输出类型。 下面是我的代码。
comp = [com1','Com2','Com3','Com4']的上栏名称
code = code1 InputData =我的exising数据,其中所有上(下列)列都存在
InputDatafeatures = [['code','com','com','com','com','somp','somp'], ['code1','Com1','Com2','Com3','Com4','nam1','nam2']]
tuples = zip(*InputDatafeatures)
index = pd.MultiIndex.from_tuples(tuples)
InputData= DataFrame(InputData, columns=index)
我能够创建上下列但是当我填充已经具有相同较低列的现有数据时不会填充它并且如果我尝试填充然后代码读取存在于第1行中的列(上层)并在这些旁边创建新列。任何帮助深表感谢。如果您需要任何其他信息或无法理解我的解释,请告诉我。 reference link second code 下面的图像显示了我当前的数据是如何以及我希望我的数据如何。
code com1 com2 com3 com4 nam1 nam2
1300079-DE 783000 1200 103000 235000 H 2D
1300079-DE 1610000 151000 88000 201000 H 2D
1300079-DE 780000 88100 51400 117000 H 2D
1300185-DE 57900 6480 6390 7910 H 2D
1300560-DE 60400 15700 17800 17400 H 2D
1301011-DE 23400 10800 3940 14500 H 2D
1301644-DE 11700 5420 1670 7230 H 2D
1301907-DE 192000 294 57800 57700 H 2D
1301907-DE 2140000 163000 192000 217000 H 2D
答案 0 :(得分:1)
我认为您只需将MultiIndex
的列更改为df.columns = columns
:
print df
code com1 com2 com3 com4 nam1 nam2
0 1300079-DE 783000 1200 103000 235000 H 2D
1 1300079-DE 1610000 151000 88000 201000 H 2D
2 1300079-DE 780000 88100 51400 117000 H 2D
3 1300185-DE 57900 6480 6390 7910 H 2D
4 1300560-DE 60400 15700 17800 17400 H 2D
5 1301011-DE 23400 10800 3940 14500 H 2D
6 1301644-DE 11700 5420 1670 7230 H 2D
7 1301907-DE 192000 294 57800 57700 H 2D
8 1301907-DE 2140000 163000 192000 217000 H 2D
InputDatafeatures = [['code','com','com','com','com','somp','somp'],
['code1','Com1','Com2','Com3','Com4','nam1','nam2']]
tuples = zip(*InputDatafeatures)
cols = pd.MultiIndex.from_tuples(tuples)
print cols
MultiIndex(levels=[[u'code', u'com', u'somp'],
[u'Com1', u'Com2', u'Com3', u'Com4', u'code1', u'nam1', u'nam2']],
labels=[[0, 1, 1, 1, 1, 2, 2], [4, 0, 1, 2, 3, 5, 6]])
df.columns = cols
print df
code com somp
code1 Com1 Com2 Com3 Com4 nam1 nam2
0 1300079-DE 783000 1200 103000 235000 H 2D
1 1300079-DE 1610000 151000 88000 201000 H 2D
2 1300079-DE 780000 88100 51400 117000 H 2D
3 1300185-DE 57900 6480 6390 7910 H 2D
4 1300560-DE 60400 15700 17800 17400 H 2D
5 1301011-DE 23400 10800 3940 14500 H 2D
6 1301644-DE 11700 5420 1670 7230 H 2D
7 1301907-DE 192000 294 57800 57700 H 2D
8 1301907-DE 2140000 163000 192000 217000 H 2D
编辑:
您可以使用值df.columns
来创建Multiindex
:
InputDatafeatures = [['code','com','com','com','com','somp','somp'], df.columns]
tuples = zip(*InputDatafeatures)
cols = pd.MultiIndex.from_tuples(tuples)
print cols
MultiIndex(levels=[[u'code', u'com', u'somp'],
[u'code', u'com1', u'com2', u'com3', u'com4', u'nam1', u'nam2']],
labels=[[0, 1, 1, 1, 1, 2, 2], [0, 1, 2, 3, 4, 5, 6]])
df.columns = cols
print df
code com somp
code com1 com2 com3 com4 nam1 nam2
0 1300079-DE 783000 1200 103000 235000 H 2D
1 1300079-DE 1610000 151000 88000 201000 H 2D
2 1300079-DE 780000 88100 51400 117000 H 2D
3 1300185-DE 57900 6480 6390 7910 H 2D
4 1300560-DE 60400 15700 17800 17400 H 2D
5 1301011-DE 23400 10800 3940 14500 H 2D
6 1301644-DE 11700 5420 1670 7230 H 2D
7 1301907-DE 192000 294 57800 57700 H 2D
8 1301907-DE 2140000 163000 192000 217000 H 2D
感谢您的回答,它几乎解决了我的问题,但每列较低的列都会重复上栏。相反,我想看上面的列类似于'合并和中心'在python中。导出到csv后,我的数据看起来像这样。请看一下附图。
编辑:
最佳选择可以是:
df.to_excel('output.xlsx', index=False)
但不幸的是它引发了错误:
NotImplementedError:使用MultiIndex列写入Excel并且没有索引('索引' = False)尚未实现。
所以你可以使用:
df.to_excel('output.xlsx')
但是index
被写入第一列。