将多级索引数据框转换为系列。

6

我创建了一个多级索引数据框:

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

如果这不是一个多重索引的DataFrame,请告诉我如何制作一个。
我想要做到以下几点:
- 按照索引中相同的列进行分组 - 聚合每个组的计数 - 然后将整个结果作为Series返回,其中Field1和Field2为索引
我应该如何操作呢?
额外信息:
我有一个长成这样的多重索引DataFrame:
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

如何将它作为一个带有索引为[洲,部门]的Series返回?

2个回答

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

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

pandas中size和count有什么区别?

依据评论进行编辑:

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 

我已经在问题中添加了额外的信息。 - Alex
我很蠢 - 两种方式都尝试了,它们都起作用了。谢谢@jezrael - Alex

-1

你可以像这样直接查询dataframe:

df['count']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接