首页 > 解决方案 > 在具有多索引的 Pandas DataFrame 中获取累积列表的最快方法,按索引分组

问题描述

所以我有一个看起来像的数据框

                    column
index1    index2 
0         0             10
          1             11
          2             12
          3             13
          4             14
1         0             20
          1             21
          2             22
          3             23
          4             24

我想获得一个看起来像的数据框

                    column          cumulative
index1    index2 
0         0             10                  []
          1             11                [10]
          2             12            [10, 11]
          3             13        [10, 11, 12]
          4             14    [10, 11, 12, 13]
1         0             20                  []
          1             21                [20]
          2             22            [20, 21]
          3             23        [20, 21, 22]
          4             24    [20, 21, 22, 23]

我保证索引已排序。如果我存储在cumulative列中的对象不是 Python 列表而是 Numpy 数组,如果这样可以使实现更高效,我也很好。

基本上,目标是在某些机器学习算法中使用特征结果的完整历史作为其本身的另一个特征。如果这不是推荐的方法,那么请提出另一种方法。

标签: pandasdataframepandas-groupby

解决方案


可能不是最优雅的:

df.assign(column=df['column'].apply(lambda x: [x])).groupby(level=0).apply(np.cumsum)

                             column
index1 index2                      
0      0                       [10]
       1                   [10, 11]
       2               [10, 11, 12]
       3           [10, 11, 12, 13]
       4       [10, 11, 12, 13, 14]
1      0                       [20]
       1                   [20, 21]
       2               [20, 21, 22]
       3           [20, 21, 22, 23]
       4       [20, 21, 22, 23, 24]

推荐阅读