【问题标题】:Pandas - Pivot and Rearrange Table With Multiple Labels in Same HeaderPandas - 在同一标题中使用多个标签对表进行透视和重新排列
【发布时间】:2020-05-30 17:27:19
【问题描述】:

我有一个 xlsx 文件,其中包含多年数据的选项卡。每个选项卡都包含一个包含许多列的表格,表格的结构如下:

+-----------+-------+-------------------------+----------------------+
|   City    | State | Number of Drivers, 2019 | Number of Cars, 2019 |
+-----------+-------+-------------------------+----------------------+
| LA        | CA    |                     123 |                 10.0 |
| San Diego | CA    |                     456 |                 2345 |
+-----------+-------+-------------------------+----------------------+

我想重新排列表格,使其看起来像这样,并为 xlsx 中的每个选项卡执行此操作:

+-----------+-------+------+-------------------+---------------+
|   City    | State | Year |   Measure Name    | Measure Value |
+-----------+-------+------+-------------------+---------------+
| LA        | CA    | 2019 | Number of Drivers |           123 |
| San Diego | CA    | 2019 | Number of Drivers |           456 |
| LA        | CA    | 2019 | Number of Cars    |            10 |
| San Diego | CA    | 2019 | Number of Cars    |          2345 |
+-----------+-------+------+-------------------+---------------+

这有很多动人的部分,并且要正确地获得最终格式有点棘手。

【问题讨论】:

    标签: pandas dataframe split header reformatting


    【解决方案1】:

    我们先melt 然后joinstr.split

    s=df.melt(['City','State'])
    s=s.join(s.variable.str.split(',',expand=True))
    Out[120]: 
           City State              variable   value                0     1
    0        LA    CA  NumberofDrivers,2019   123.0  NumberofDrivers  2019
    1  SanDiego    CA  NumberofDrivers,2019   456.0  NumberofDrivers  2019
    2        LA    CA     NumberofCars,2019    10.0     NumberofCars  2019
    3  SanDiego    CA     NumberofCars,2019  2345.0     NumberofCars  2019
    
    # if you need change the name adding .rename(columns={}) at the end 
    

    【讨论】:

    • 成功了,非常感谢!下面我将添加代码以对 xlsx 文件中的所有选项卡执行表格重新排列。
    【解决方案2】:

    这就是我如何将 Yoben 的解决方案应用于 xlsx 文件中的每个选项卡,将它们附加在一起并将完整的表格写入 .csv:

    sheets_dict = pd.read_excel(r'file.xlsx', sheet_name=None)
    
    full_table = pd.DataFrame()
    for name, sheet in sheets_dict.items():
        sheet['sheet'] = name
        sheet = sheet.melt(['City','State'])
        sheet = sheet.join(sheet.variable.str.split(',' , expand=True))
        full_table = full_table.append(sheet)
    
    
    full_table.reset_index(inplace=True, drop=True)
    
    
    full_table.to_csv('Full Table.csv')
    

    【讨论】:

      猜你喜欢
      • 2016-07-06
      • 1970-01-01
      • 2023-03-29
      • 2018-11-29
      • 2021-08-19
      • 1970-01-01
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多