gpt4 book ai didi

python - SQL:使用现有表/df 中的信息创建新表/df

转载 作者:行者123 更新时间:2023-11-29 14:25:31 25 4
gpt4 key购买 nike

我有一个表格,其中包含不同的广告系列、广告系列运行的总天数以及日期,以及总成本。我想为每个事件的每一天创建一个包含一行的表格。例如,现在我有:

Campaign    Total Cost  Total Days   Start Date     End Date
Campaign A $10 3 Jan 1, 2011 Jan 3, 2011
Campaign B $12 2 Jan 2, 2011 Jan 3, 2011
Campaign C $8 1 Jan 4, 2011 Jan 4, 2011

我想要这样的东西:

Campaign      Cost        Day
Campaign A $3.33 2011-01-01
Campaign A $3.33 2011-01-02
Campaign A $3.33 2011-01-03
Campaign B $6 2011-01-02
Campaign B $6 2011-01-03
Campaign C $8 2011-01-04

这样它就被分成了一天的值。

我试图将其导入到 pandas 数据框中,并通过遍历第一个表中的行来将它们添加到那里,但这非常低效,因为一些事件持续了一年左右。使用 SQL 有更简单的方法吗?或者你能想到的另一种方法?我是一个完整的新手,所以我不确定。如果有区别,我会使用 postgresql/python。感谢您的帮助!

最佳答案

大多数数据库都支持递归 CTE,您可以使用它:

with recursive cte as (
select campaign, cost, startdate as day, enddate,
(enddate - startdate) + 1 as num_days
from t
union all
select campaign, cost, startdate + interval '1 day' as day, enddate, num_days
from t
where startdate < enddate
)
select campaign, cost / num_days, day
from cte
order by campaign, day;

在 Postgres 中,我会推荐 generate_series():

select t.campaign,
t.cost / (enddate::date - startdate::date + 1) as cost,
gs.day
from t cross join lateral
generate_series(startdate::date, enddate::date, interval '1 day') gs(day)
order by campaign, day;

关于python - SQL:使用现有表/df 中的信息创建新表/df,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58453383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com