【问题标题】:Converting list of lists with tuple into data frame?将带有元组的列表列表转换为数据框?
【发布时间】:2021-08-20 07:48:53
【问题描述】:

我有以下嵌套列表:

 lst = [[1, 1, 10], 
        [1, 2, 28.6], 
        [1, 3, 26.93], 
        [1, 4, 20],
        [2, 1, 6],
        [2, 2, 4],
        [2, 3, 6],
        [2, 4, 23],
        [3, 1, 12], 
        [3, 2, 23], 
        [3, 3, 13],
        [3, 4, 43]]

第一项和第二项分别指向 x 和 y,第三项是该特定单元格的值。所以我需要将这个列表转换成一个数据框,其中第一项应该是列,第二项应该是索引,最后第三项应该是那些列的值。鉴于上面的例子,我想要的结果应该是这样的:

mydata_frame:
              1       2     3    
           1  10      6     12
           2  28.6    4     23
           3  26.93   6     13
           4  20      23    43
           

【问题讨论】:

    标签: python list dataframe data-conversion


    【解决方案1】:

    试试pandas:

    import pandas as pd
    df = pd.DataFrame(lst)
    df = df.pivot_table(2, 1, 0)
    df.columns = sorted(set(list(zip(*lst))[0]))
    df.index.name = None
    print(df)
    

    【讨论】:

      【解决方案2】:

      使用pandas.DataFrame.pivotrename_axis

      df = pd.DataFrame(lst).pivot(index=1, columns=0, values=2)
      df = df.rename_axis(index=None, columns=None)
      print(df)
      

      输出:

             1     2     3
      1  10.00   6.0  12.0
      2  28.60   4.0  23.0
      3  26.93   6.0  13.0
      4  20.00  23.0  43.0
      

      【讨论】:

        【解决方案3】:

        另一种解决方案 - 首先从lst 创建一个包含多级列的数据框,然后使用.stack 将其塑造成最终形式:

        df = (
            pd.DataFrame({(x, y): z for x, y, z in lst}, index=[0])
            .stack(level=1)
            .droplevel(0)
        )
        print(df)
        

        打印:

               1   2   3
        1  10.00   6  12
        2  28.60   4  23
        3  26.93   6  13
        4  20.00  23  43
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-11
          • 1970-01-01
          • 1970-01-01
          • 2018-02-03
          • 2017-12-30
          相关资源
          最近更新 更多