需要为许多较低的列创建上部列并填充其中的现有数据

时间:2016-05-05 18:41:32

标签: python pandas dataframe

我想在现有列上进行多次索引。以下是例子。

我想为现有的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

wrong output correct output

1 个答案:

答案 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后,我的数据看起来像这样。请看一下附图。output

编辑:

最佳选择可以是:

df.to_excel('output.xlsx', index=False)

但不幸的是它引发了错误:

  

NotImplementedError:使用MultiIndex列写入Excel并且没有索引('索引' = False)尚未实现。

所以你可以使用:

df.to_excel('output.xlsx')

但是index被写入第一列。