Pandas groupby两列,包括每组第2列的所有可能值

问题描述 投票:1回答:1

我确定这是重复但我无法找到它。

我有这个数据框:

import pandas as pd

df = pd.DataFrame(data=[['Sweden','A',5],
                        ['Sweden','A',10],
                        ['Norway','B',4],
                        ['Norway','C',5]],
                  columns=['Country','Class','Value'])
print(df)

  Country Class  Value
0  Sweden     A      5
1  Sweden     A     10
2  Norway     B      4
3  Norway     C      5

我想分组国家和班级并找到他们的总和,所以我尝试:

df.groupby(['Country','Class']).sum()
               Value
Country Class       
Norway  B          4
        C          5
Sweden  A         15

但是我想要为每个国家/地区包含所有可能的类,就像这样

               Value

Country Class       
Norway  B          4
        C          5
        A         na
Sweden  A         15
        B         na
        C         na

我怎么解决这个问题?

python pandas
1个回答
4
投票

选项1 unstack再次stack

df.groupby(['Country','Class']).sum().unstack().stack(dropna=False)

               Value
Country Class       
Norway  A        NaN
        B        4.0
        C        5.0
Sweden  A       15.0
        B        NaN
        C        NaN

选项2 另一个选择是reindex与一个构造的MultiIndex

v = df.groupby(['Country','Class']).sum()
idx = pd.MultiIndex.from_product([df.Country.unique(), df.Class.unique()])

v.reindex(idx)

          Value
Sweden A   15.0
       B    NaN
       C    NaN
Norway A    NaN
       B    4.0
       C    5.0
© www.soinside.com 2019 - 2024. All rights reserved.