【发布时间】:2019-05-01 19:43:22
【问题描述】:
我有一个数据框,hourly_subset_df 在哪里
hourly_subset_df.columns = ['date', 'metadata.campaignName', 'localSpend.amount', 'daily_cap']
它包含不同的广告活动及其相应的一天中每小时的支出值。
我想计算每个组的累积总和,这样我就可以看到每个广告系列全天的支出变化。
我已经尝试过:
hourly_subset_df['cumsum'] = hourly_subset_df.groupby(['metadata.campaignName', 'date', 'daily_cap'])['localSpend.amount'].cumsum()
和
hourly_subset_df.groupby(['metadata.campaignName', 'date', 'daily_cap'])['localSpend.amount'].transform(pd.Series.cumsum)
我得到的结果只是支出列 ('localSpend.amount') 的副本,而不是 ['metadata.campaignName', 'date', 'daily_cap'] 唯一组的累积总和。
为什么这不起作用?
编辑:我已将示例数据框创建为 dict here(太大,无法粘贴到此处)。
【问题讨论】:
-
您能否提供一小部分数据框和您的预期输出,以便我们重现您的问题?
-
您没有告诉我们
hourly_subset_df.daily_cap是什么,但可能是该列的值与每一行的值之间存在一对一的映射,因此df.groupby对象不会'实际上没有分组任何东西?模拟数据会有所帮助。 -
我的猜测是您正确计算了
cumsum,但您的组不正确。您的分组列包括date,这可能是完整的日期时间,这意味着每一行基本上都属于它自己的组,因此cumsumaross 组与原始系列相同。您可能只需要提取hourly_subset_df.date.dt.date作为分组列的日期 -
我会尝试获取示例数据集。我相信这些组是正确的,因为我已经分别检查了 groupby 并且它看起来应该是正确的。每日上限是整数,每个日期、广告系列名称组合都相同。
-
我第二个@ALollz。试试 hourly_subset_df.groupby(['metadata.campaignName', hourly_subset_df['date'].dt.date, 'daily_cap'])['localSpend.amount'].cumsum()
标签: python pandas pandas-groupby cumsum