【问题标题】:Month wise total and cummilative sum - Pandas每月总计和累计总和 - 熊猫
【发布时间】:2022-02-12 02:15:17
【问题描述】:

我希望根据一年中的月份对总收入和逐月累计收入进行每月明智的分配。来源示例如下表所示

Bill_Date     Sale_Net_Value
2021-01-01    220
2021-01-28    300
2021-02-03    250

预期输出:

Month  Total_Revnue cumilitive
Jan    520          520
Feb    250          770

【问题讨论】:

  • 这能回答你的问题吗? pandas dataframe groupby datetime month
  • 如何获得预期的输出? 420 或 440 是从哪里来的?
  • 是的,这些只是我输入的随机数。但你知道我在实际的商店交易数据集中有超过 100 万行
  • 您的数据集是否跨越多年?
  • 不,它仅包含 2021 年的交易,并且每天至少有 1 笔交易

标签: python pandas dataframe


【解决方案1】:

您可以按月份分组并对“Sale_Net_Value”列求和,然后使用assign 和cumsum() 在该列上创建一个新列:

df['Bill_Date'] = pd.to_datetime(df.Bill_Date)

df.groupby(df.Bill_Date.dt.month_name().str[:3]).agg(
    Total_revenue=('Sale_Net_Value','sum')
    ).assign(cumulative= lambda col: col['Total_revenue'].cumsum())

打印:

           Total_revenue  cumulative
Bill_Date                           
Jan                  520         520
Mar                  250         770

【讨论】:

  • 您好,逻辑是正确的,但是累积值是根据从 4 月 8 月开始的月份名称的字母顺序计算的。可以根据 1 月 2 月 3 月重新计算吗
【解决方案2】:

使用您的示例表作为下面的 df 变量,这是我的尝试:

df.index = pd.to_datetime(df['Bill_Date'],format='%Y-%m-%d')
df = df.groupby(pd.Grouper(freq='M')).sum().reset_index()

df['Bill_Date'] = pd.to_datetime(df['Bill_Date'],format='%Y-%m-%d').dt.strftime('%b')

df['Cumulative'] = df['Sale_Net_Value'].cumsum()

df=df.rename(columns={"Bill_Date":"Month", "Sale_Net_Value":"Total_Revenue"})

print(df)

输出:

  Month  Total_Revenue  Cumulative
0   Jan            520         520
1   Feb            250         770

【讨论】:

    猜你喜欢
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    相关资源
    最近更新 更多