【问题标题】:Need to create upper column for many lower columns and filling the existing data in it需要为许多下列创建上列并在其中填充现有数据
【发布时间】:2016-05-06 18:44:14
【问题描述】:

我想对现有列进行多个索引。以下是示例。

我想为现有的 5 列指定一个列名,为另一个现有列指定另一个名称(多索引)

我几乎完成了这项工作,但是当我尝试将数据填充到空白文件中时,它会从第 1 行读取列名,但第 2 行中存在实际列,因为第一行是为第 2 行中的实际列定义的列名。您可以找到所附图像以了解我想要的输出类型。 下面是我的代码。

comp= [com1','Com2','Com3','Com4'] 的上列名称

代码=代码1 InputData= 我的现有数据,其中所有以上(下列)列都存在

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

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    我认为您可以通过df.columns = columns 将列简单地更改为MultiIndex

    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 列且没有索引 ('index'=False) 的 Excel 尚未实现。

    所以你可以使用:

    df.to_excel('output.xlsx')
    

    index 被写入第一列。

    【讨论】:

    • 感谢您的回答,它几乎解决了我的问题,但上列与每个下列重复。相反,我想在 python 中查看类似“合并和居中”的上列。导出到 csv 后我的数据如下所示。
    猜你喜欢
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多