繁体   English   中英

Pandas Groupby即使是空的,也保持一致的水平

[英]Pandas Groupby Consistent levels even if empty

我正在尝试使用group by来创建一个新的数据帧,但我需要多索引才能保持一致。 无论子类别是否存在,我都希望它像下面这样创建:

import pandas as pd

df = pd.DataFrame(
    {'Cat 1':['A','A','A','B','B','B','B','C','C','C','C','C','D'],
     'Cat 2':['A','B','A','B','B','B','A','B','B','B','B','B','A'],
     'Num':  [1,1,1,1,1,1,1,1,1,1,1,1,1]})
print df.groupby(['Cat 1','Cat 2']).sum()

输出看起来像:

             Num
Cat 1 Cat 2     
A     A        2
      B        1
B     A        1
      B        3
C     B        5
D     A        1

但我希望它看起来像

             Num
Cat 1 Cat 2     
A     A        2
      B        1
B     A        1
      B        3
C     A        Nan
      B        5
D     A        1
      B        Nan

我读取了不同的数据,然后以这种格式添加一列,因此生成的数组看起来像:

             Num        Num_added_later
Cat 1 Cat 2                
A     A        2         12
      B        1         5
B     A        1         5
      B        3         3
C     A        Nan       5
      B        5         5
D     A        1         1
      B        Nan       3

您可以根据两个Cat列创建新索引并重新索引结果:

import pandas as pd
new_index = pd.MultiIndex.from_product([df["Cat 1"].unique(), df["Cat 2"].unique()], names = ["Cat 1", "Cat 2"])

df.groupby(['Cat 1','Cat 2']).sum().reindex(new_index)

在此输入图像描述

这是一个hack1! 请使用@ Psidom的答案

df.groupby(['Cat 1','Cat 2']).sum().unstack().stack(dropna=False)

             Num
Cat 1 Cat 2     
A     A      2.0
      B      1.0
B     A      1.0
      B      3.0
C     A      NaN
      B      5.0
D     A      1.0
      B      NaN

好吧,也许不是一个黑客,但......

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM