将多索引数据帧转换为系列

Ale*_*lex 6 series multi-index pandas

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

df.set_index(['Field1', 'Field2'], inplace=True)
Run Code Online (Sandbox Code Playgroud)

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

我想要:

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

我该怎么做?

附加信息

我有一个多索引数据帧,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

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

jez*_*ael 5

我认为你需要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
Run Code Online (Sandbox Code Playgroud)
print (df.groupby(level=['Field1', 'Field2']).size())
Field1  Field2
1       4         2
        6         1
dtype: int64
Run Code Online (Sandbox Code Playgroud)
print (df.groupby(level=['Field1', 'Field2']).count())
               C  D  E  F
Field1 Field2            
1      4       2  2  2  2
       6       1  1  1  1
Run Code Online (Sandbox Code Playgroud)

熊猫的大小和数量有什么区别?

通过评论编辑:

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
Run Code Online (Sandbox Code Playgroud)

或者:

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
Run Code Online (Sandbox Code Playgroud)

所有与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 
Run Code Online (Sandbox Code Playgroud)