【问题标题】:Pandas - Add dummy rows with some values in between of Pandas.SeriesPandas - 在 Pandas.Series 之间添加一些值的虚拟行
【发布时间】:2017-05-11 20:48:16
【问题描述】:

我是 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 没有 month 那么它应该添加具有计数值的适当月份 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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    MultiIndex.from_productreindex 一起使用:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多