有没有办法将函数应用于具有相同外部索引的 MultiIndex 数据帧切片,而无需迭代每个切片?



基本上,我要完成的是填充每个产品缺少的日期(创建新的数据帧行(,然后根据列"A"的累积总和创建一个新列(示例如下所示(

数据是(product, date)作为索引的多索引。

基本上,我想将此答案应用于仅使用最右侧索引的多索引数据帧,并计算每个产品(以及所有日期(的后续np.cumsum

A
product    date 
0       2017-01-02  1
2017-01-03  2
2017-01-04  2
2017-01-05  1
2017-01-06  4
2017-01-07  1
2017-01-10  7
1       2018-06-29  1
2018-06-30  4
2018-07-01  1
2018-07-02  1
2018-07-04  2

我想要(有效地(完成的是:

A      CumSum
product    date 
0       2017-01-02  1        1
2017-01-03  2        3
2017-01-04  2        5
2017-01-05  1        6
2017-01-06  4        10
2017-01-07  1        11
2017-01-08  0        11
2017-01-09  0        11
2017-01-10  7        18
1       2018-06-29  1        1
2018-06-30  4        5
2018-07-01  1        6
2018-07-02  1        7
2018-07-03  0        7
2018-07-04  2        9

您有两种方法:

一种方式
groupbyapply一起使用,与resamplecumsum一起使用。最后,pd.concat结果为df.Afillna

结果为 0
s = (df.reset_index(0).groupby('product').apply(lambda x: x.resample(rule='D')
.asfreq(0).A.cumsum()))
pd.concat([df.A, s.rename('cumsum')], axis=1).fillna(0)
Out[337]:
A  cumsum
product date
0       2017-01-02  1.0       1
2017-01-03  2.0       3
2017-01-04  2.0       5
2017-01-05  1.0       6
2017-01-06  4.0      10
2017-01-07  1.0      11
2017-01-08  0.0      11
2017-01-09  0.0      11
2017-01-10  7.0      18
1       2018-06-29  1.0       1
2018-06-30  4.0       5
2018-07-01  1.0       6
2018-07-02  1.0       7
2018-07-03  0.0       7
2018-07-04  2.0       9

另一种方式
您需要 2 个分组。第一个用于resample,第二个用于cumsum。最后,使用pd.concat和 0 的fillna

s1 = df.reset_index(0).groupby('product').resample(rule='D').asfreq(0).A
pd.concat([df.A, s1.groupby(level=0).cumsum().rename('cumsum')], axis=1).fillna(0)
Out[351]:
A  cumsum
product date
0       2017-01-02  1.0       1
2017-01-03  2.0       3
2017-01-04  2.0       5
2017-01-05  1.0       6
2017-01-06  4.0      10
2017-01-07  1.0      11
2017-01-08  0.0      11
2017-01-09  0.0      11
2017-01-10  7.0      18
1       2018-06-29  1.0       1
2018-06-30  4.0       5
2018-07-01  1.0       6
2018-07-02  1.0       7
2018-07-03  0.0       7
2018-07-04  2.0       9

最新更新