【问题标题】:Convert MultiIndex DataFrame to Series将 MultiIndex DataFrame 转换为系列
【发布时间】:2017-04-28 03:27:26
【问题描述】:

我通过以下方式创建了一个 multiIndex DataFrame:

df.set_index(['Field1', 'Field2'], inplace=True)

如果这不是多索引数据帧,请告诉我如何制作。

我想:

  • 按索引中的相同列分组
  • 汇总每个组的计数
  • 然后将整个事物作为一个以 Field1 和 Field2 为索引的系列返回

我该怎么做?

附加信息

我有一个如下所示的 multiIndex 数据帧:

Continent     Sector                Count     
Asia          1                     4
              2                     1
Australia     1                     1
Europe        1                     1
              2                     3
              3                     2
North America 1                     1
              5                     1
South America 5                     1

如何将其作为具有 [Continent, Sector] 索引的系列返回

【问题讨论】:

    标签: pandas series multi-index


    【解决方案1】:

    我认为你需要groupby 和聚合size:

    df = pd.DataFrame({'Field1':[1,1,1],
                       'Field2':[4,4,6],
                       'C':[7,8,9],
                       'D':[1,3,5],
                       'E':[5,3,6],
                       'F':[7,4,3]})
    
    
    df.set_index(['Field1', 'Field2'], inplace=True)
    print (df)
                   C  D  E  F
    Field1 Field2            
    1      4       7  1  5  7
           4       8  3  3  4
           6       9  5  6  3
    
    print (df.index)
    MultiIndex(levels=[[1], [4, 6]],
               labels=[[0, 0, 0], [0, 0, 1]],
               names=['Field1', 'Field2'])
    
    print (df.groupby(level=[0,1]).size())
    Field1  Field2
    1       4         2
            6         1
    dtype: int64
    

    print (df.groupby(level=['Field1', 'Field2']).size())
    Field1  Field2
    1       4         2
            6         1
    dtype: int64
    

    print (df.groupby(level=['Field1', 'Field2']).count())
                   C  D  E  F
    Field1 Field2            
    1      4       2  2  2  2
           6       1  1  1  1
    

    What is the difference between size and count in pandas?

    通过评论编辑:

    df.set_index(['Continent', 'Sector'], inplace=True)
    print (df)
                          Count
    Continent     Sector       
    Asia          1           4
                  2           1
    Australia     1           1
    Europe        1           1
                  2           3
                  3           2
    North America 1           1
                  5           1
    South America 5           1
    
    print (df['Count'])
    Continent      Sector
    Asia           1         4
                   2         1
    Australia      1         1
    Europe         1         1
                   2         3
                   3         2
    North America  1         1
                   5         1
    South America  5         1
    Name: Count, dtype: int64
    

    或者:

    print (df.squeeze())
    Continent      Sector
    Asia           1         4
                   2         1
    Australia      1         1
    Europe         1         1
                   2         3
                   3         2
    North America  1         1
                   5         1
    South America  5         1
    Name: Count, dtype: int64
    

    大家一起set_index:

    print (df)
           Continent  Sector  Count
    0           Asia       1      4
    1           Asia       2      1
    2      Australia       1      1
    3         Europe       1      1
    4         Europe       2      3
    5         Europe       3      2
    6  North America       1      1
    7  North America       5      1
    8  South America       5      1
    
    print (df.set_index(['Continent', 'Sector'])['Count'])
    Continent      Sector
    Asia           1         4
                   2         1
    Australia      1         1
    Europe         1         1
                   2         3
                   3         2
    North America  1         1
                   5         1
    South America  5         1
    Name: Count, dtype: int64 
    

    【讨论】:

    • 我已在问题中添加了其他信息
    • 我很笨 - 两种方法都试过了,它们都起作用了。谢谢@jezrael
    【解决方案2】:

    您可以像这样查询dataframe:

    df['count']
    

    【讨论】:

      猜你喜欢
      • 2013-03-22
      • 2020-05-27
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      • 2018-07-25
      • 1970-01-01
      • 2014-11-23
      相关资源
      最近更新 更多