【问题标题】:expand year values to month in pandas在熊猫中将年份值扩展到月份
【发布时间】:2019-10-15 07:07:53
【问题描述】:

我有按年份计算的销售额:

pd.DataFrame({'year':[2015,2016,2017],'value':['12','24','30']})
    year    value
0   2015    12
1   2016    24
2   2017    36

我想推断几个月:

yyyymm value
201501 1 (ie 12/12, etc)
201502 1
...
201512 1
201601 2
...
201712 3

有什么建议吗?

【问题讨论】:

    标签: pandas reshape


    【解决方案1】:

    一个想法是使用交叉连接和辅助DataFrame,将列转换为字符串并添加0 by Series.str.zfill

    df1 = pd.DataFrame({'m': range(1, 13), 'a' : 1})
    
    df = df.assign(a = 1).merge(df1).drop('a', 1)
    df['year'] = df['year'].astype(str) + df.pop('m').astype(str).str.zfill(2)
    df = df.rename(columns={'year':'yyyymm'})
    

    另一种解决方案是创建MultiIndex 并使用DataFrame.reindex

    mux = pd.MultiIndex.from_product([df['year'], range(1, 13)], names=['yyyymm','m'])
    df = df.set_index('year').reindex(mux, level=0).reset_index()
    df['yyyymm'] = df['yyyymm'].astype(str) + df.pop('m').astype(str).str.zfill(2)
    

    print (df.head(15))
        yyyymm value
    0   201501    12
    1   201502    12
    2   201503    12
    3   201504    12
    4   201505    12
    5   201506    12
    6   201507    12
    7   201508    12
    8   201509    12
    9   201510    12
    10  201511    12
    11  201512    12
    12  201601    24
    13  201602    24
    14  201603    24
    

    【讨论】:

    • 太棒了。如果有一个特定的值在年中而不是开始时下降,那将如何运作?我将显示另一个问题
    • @alex - 你认为原始的月份也有列吗?或者需要从例如开始每年四月?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 2017-06-14
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多