Panadas透视表

时间:2016-03-14 15:57:50

标签: python pandas pivot

当尝试在给定数据集上使用pd.pivot_table时,我注意到它为父组的所有现有级别创建级别,而不是所有可能的级别。例如,在像这样的数据集上:

enter image description here

    YEAR    CLASS
0   2013    A
1   2013    A
2   2013    B
3   2013    B
4   2013    B
5   2013    C
6   2013    C
7   2013    D
8   2014    A
9   2014    A
10  2014    A
11  2014    B
12  2014    B
13  2014    B
14  2014    C
15  2014    C

2014年没有等级D,因此数据透视表将如下所示:

pd.pivot_table(d,index=["YEAR","CLASS"],values=["YEAR"],aggfunc=[len],fill_value=0)

enter image description here

len
YEAR    CLASS   
2013    A   2
        B   3
        C   2
        D   1
2014    A   3
        B   3
        C   2

我想要的是在2014年获得一个单独的D组,在我的数据透视表中长度为0。如何在父变量的子变量中包含所有可能的级别?

1 个答案:

答案 0 :(得分:0)

我认为您可以使用crosstabstack

print pd.pivot_table(df,
                     index=["YEAR","CLASS"],
                     values=["YEAR"],
                     aggfunc=[len],
                     fill_value=0)

            len
YEAR CLASS     
2013 A        2
     B        3
     C        2
     D        1
2014 A        3
     B        3
     C        2

print pd.crosstab(df['YEAR'],df['CLASS'])
CLASS  A  B  C  D
YEAR             
2013   2  3  2  1
2014   3  3  2  0

df = pd.crosstab(df['YEAR'],df['CLASS']).stack()
df.name = 'len'
print df
YEAR  CLASS
2013  A        2
      B        3
      C        2
      D        1
2014  A        3
      B        3
      C        2
      D        0
Name: len, dtype: int64