按总月数拆分预算列,得出平均每月预算

问题描述 投票:0回答:1

我正在尝试创建一个新列,其中包含基于活动持续时间的平均每月预算

我当前的数据集如下所示

客户 开始日期 结束日期 活动 总预算
ABC 2024年1月1日 2024年1月31日 123 1,000
防御 2024年1月1日 2024年3月31日 456 15,000
XYZ 2024年1月1日 2024年6月30日 789 60,000

我想做的是根据开始/结束日期的持续时间平均划分每行的总预算列

  • 第 1 行:1 个月

  • 第 2 行:3 个月

  • 第 3 行:6 个月

  • 等等

我不确定从哪里开始尝试编写此代码,所以我想知道这是否可以做到?

我的预期结果如下

客户 开始日期 结束日期 活动 总预算 平均每月预算
ABC 2024年1月1日 2024年1月31日 123 1,000 1,000
防御 2024年1月1日 2024年3月31日 456 15,000 3,000
XYZ 2024年1月1日 2024年6月30日 789 60,000 10,000
pandas group-by split average
1个回答
0
投票
  1. 如果日期是日期时间格式,您可以将它们相减,这将生成时间增量。
  2. 从中您可以得到天数并计算出相应的月数。
  3. 然后将总预算除以月数。
# optional: convert dates to datetime if they aren't already
df["Start Date"] = pd.to_datetime(df["Start Date"], format="%d/%m/%Y")
df["End Date"] = pd.to_datetime(df["End Date"], format="%d/%m/%Y")

df["Avg Monthly Budget"] = df["Total Budget"] / (
    (df["End Date"] - df["Start Date"]).dt.days // 30
)

结果:

  Client Start Date   End Date  Campaign  Total Budget  Avg Monthly Budget
0    ABC 2024-01-01 2024-01-31       123          1000              1000.0
1    DEF 2024-01-01 2024-03-31       456         15000              5000.0
2    XYZ 2024-01-01 2024-06-30       789         60000             10000.0
© www.soinside.com 2019 - 2024. All rights reserved.