Pandas - 在Pandas.Series

时间:2017-05-11 12:45:27

标签: python pandas

我是Pandas Python的新手。

我有一个Pandas.Series值:

month   id
01_Jan  1                3
02_Feb  1                2
        2                4
03_Mar  1                2
        3                5
dtype: int64

month和id是索引,最后一列是pandas中的系列。

这里,月有4个值,例如“01_Jan”,“02_Feb”,“03_Mar”。       id计数如1,2,3       系列有一些计数3,2,4,2,5。

我需要重新格式化上述系列类型,如果 id 没有,那么它应该添加计数值的相应月份0 即可。 pandas.Series 下面解释了它应该是什么样的:

month   id
01_Jan  1                3
01_Jan  2                0
01_Jan  3                0
02_Feb  1                2
02_Feb  2                4
02_Feb  3                0
03_Mar  1                2
03_Mar  2                0
03_Mar  3                5
dtype: int64

1 个答案:

答案 0 :(得分:1)

MultiIndex.from_product使用reindex

mux = pd.MultiIndex.from_product(s.index.levels, names=s.index.names)
print (s.reindex(mux, fill_value=0))
month   id
01_Jan  1     3
        2     0
        3     0
02_Feb  1     2
        2     4
        3     0
03_Mar  1     2
        2     0
        3     5
dtype: int64

unstack + stack的另一种解决方案,但在大型DataFrame中速度较慢:

print (s.unstack(fill_value=0).stack())
month   id
01_Jan  1     3
        2     0
        3     0
02_Feb  1     2
        2     4
        3     0
03_Mar  1     2
        2     0
        3     5
dtype: int64