gpt4 book ai didi

Python:缺少行的多个 ID 的累积和

转载 作者:行者123 更新时间:2023-12-01 01:20:30 25 4
gpt4 key购买 nike

我有一个包含 104 个唯一日期和 200k SKU 的大型数据集。为了进行解释,我使用了 3 个 SKU 和 4 个日期。

数据如下

 Date      SKU        Demand      Supply
20160501 1 10 10
20160508 1 35 20
20160501 2 20 15
20160508 2 15 20
20160522 2 5 0
20160522 3 55 45

仅在需求或供应非零的情况下才会填充行。我想计算累积需求和供应,同时通过在缺失日期中添加 0 来为所有 ID 提供连续的日期范围。

我的输出是这样的

Date       SKU        Demand      Supply    Cum_Demand    Cum_Supply
20160501 1 10 10 10 10
20160508 1 35 20 45 30
20160515 1 0 0 45 30
20160522 1 0 0 45 30
20160501 2 20 15 20 15
20160508 2 15 20 35 35
20160515 2 0 0 35 35
20160522 2 5 0 40 35
20160501 3 0 0 0 0
20160508 3 0 0 0 0
20160515 3 0 0 0 0
20160522 3 55 45 55 45

数据框代码

data = pd.DataFrame({'Date':[20160501,20160508,20160501,20160508,20160522,20160522],
'SKU':[1,1,2,2,2,3],
'Demand':[10,35,20,15,5,55],
'Supply':[10,20,15,20,0,45]}
,columns=['Date', 'SKU', 'Demand', 'Supply'])

最佳答案

需要首先重新索引,然后groupby + cumsum并且可以连接回来:

import pandas as pd

idx = pd.MultiIndex.from_product([[20160501,20160508,20160515,20160522],
data.SKU.unique()], names=['Date', 'SKU'])
#If have all unique dates needed in column then:
#pd.MultiIndex.from_product([np.unique(data.Date), data.SKU.unique()])

data2 = data.set_index(['Date', 'SKU']).reindex(idx).fillna(0)
data2 = pd.concat([data2, data2.groupby(level=1).cumsum().add_prefix('Cum_')], 1).sort_index(level=1).reset_index()

输出数据2:

        Date  SKU  Demand  Supply  Cum_Demand  Cum_Supply
0 20160501 1 10.0 10.0 10.0 10.0
1 20160508 1 35.0 20.0 45.0 30.0
2 20160515 1 0.0 0.0 45.0 30.0
3 20160522 1 0.0 0.0 45.0 30.0
4 20160501 2 20.0 15.0 20.0 15.0
5 20160508 2 15.0 20.0 35.0 35.0
6 20160515 2 0.0 0.0 35.0 35.0
7 20160522 2 5.0 0.0 40.0 35.0
8 20160501 3 0.0 0.0 0.0 0.0
9 20160508 3 0.0 0.0 0.0 0.0
10 20160515 3 0.0 0.0 0.0 0.0
11 20160522 3 55.0 45.0 55.0 45.0

你需要小心你的约会。在本例中,我明确列出了顺序,因此较早的日期首先出现。如果它们是数字,那么您可以使用np.unique,它将对值进行排序,确保日期有序。但这依赖于 DataFrame 中的每个日期至少出现一次。否则,您将需要以某种方式创建有序日期列表。

关于Python:缺少行的多个 ID 的累积和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53876239/

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