【问题标题】:Divide rows from yearly to monthly values pandas将行从年度值划分为月值熊猫
【发布时间】:2021-10-12 22:31:23
【问题描述】:

我正在尝试根据月份将具有开始日期和结束日期的订单项分成多行。 应根据特定月份的天数计算值。

例如,1个订单项的数据:

id StartDate EndDate Annual
abc 12/12/2018 01/12/2019 120,450

预期输出:

id Month Year Monthly volume
abc 12 2018 6,600
abc 1 2019 10,230
abc 2 2019 9,240
abc 3 2019 10,230
abc 4 2019 9,900
abc 5 2019 10,230
abc 6 2019 9,900
abc 7 2019 10,230
abc 8 2019 10,230
abc 9 2019 9,900
abc 10 2019 10,230
abc 11 2019 9,900

【问题讨论】:

    标签: pandas dataframe date split row


    【解决方案1】:

    下次你问的东西很少。

    • 这是一种已有答案的情况,因此请务必尝试 google 首先是减少重复。其他帖子在下面的代码中引用。
    • 您还应该始终包含您已经尝试过的代码,所以没有 喜欢做你的作业,但我们会帮你做。
    • 您应该包含一个更容易复制的数据框。我不应该复制粘贴来构建它,如下面的代码所示。
    • 您显然正在做某事将年度总量转换为月度总量,但您没有对此进行解释,所以不要指望它会为您完成。
    • 最后,此代码不会转换为单独的月份和年份列,但是一旦您有了日期,这对您来说应该是微不足道的(或谷歌如何做)。
    import pandas as pd
    
    df = pd.DataFrame(
        data = [['abc','12/12/2018','12/01/2019',120450]], 
        columns = ['id', 'startDate', 'EndDate', 'Annual'] 
    )
    df['startDate'] = pd.to_datetime(df['startDate'])
    df['EndDate'] = pd.to_datetime(df['EndDate'])
    # pd.bdate_range(start="2020/12/16", end="2020/12/26", freq="C", weekmask="Sat Sun")
    # %%
    df_start_end = df.melt(id_vars=['id', 'Annual'],value_name='date')
    # credit to u/gen
    # https://stackoverflow.com/questions/42151886/expanding-pandas-data-frame-with-date-range-in-columns
    df = (
        df_start_end.groupby('id')
        .apply(lambda x: x.set_index('date')
        .resample('M').pad())
        .drop(columns=['id','variable'])
        .reset_index()
    )
    print(df)
    

    【讨论】:

    • 完美运行。将来的问题会考虑你是 cmets。
    猜你喜欢
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2020-10-06
    • 1970-01-01
    • 2019-09-08
    • 2016-06-24
    相关资源
    最近更新 更多