Pandas Groupby:对不同列执行cumsum()后出现警告消息

Pandas Groupby:对不同列执行cumsum()后出现警告消息,pandas,Pandas,我从excel导入了下表: sheet5=pd.read_excel(data, 'Sheet5').set_index('item') display(sheet5) x y days item A 0.2076 0.0000 4 A 0.0000 0.0000 1 A 55.9240 39.8879 31 A 54.5062 46.2022 30 A 38.6522 32.9306 31 A 27.58

我从excel导入了下表:

sheet5=pd.read_excel(data, 'Sheet5').set_index('item')
display(sheet5)

    x       y       days
item            
A   0.2076  0.0000  4
A   0.0000  0.0000  1
A   55.9240 39.8879 31
A   54.5062 46.2022 30
A   38.6522 32.9306 31
A   27.5890 25.7896 30
A   23.4207 21.9209 31
A   21.1067 18.6405 31
B   4.7236  4.4775  6
B   1.6416  1.1710  1
B   0.6177  0.0000  1
B   68.6652 45.7007 30
B   85.6364 61.6806 30
B   56.0095 43.1121 30
B   38.9339 25.0558 31
B   45.6508 33.9727 31
B   37.6672 32.0657 30
B   31.1604 29.2204 31
B   26.0266 24.9480 30
然后,我进入“项目”列的“分组方式”,并计算一个累积总和

df=sheet5.groupby(['item'])['x', 'y', 'days'].cumsum()
display(df)

    x       y       days
item            
A   0.20    0.00    4
A   0.20    0.00    5
A   56.13   39.88   36
A   110.63  86.09   66
A   149.29  119.02  97
A   176.87  144.81  127
A   200.29  166.73  158
A   221.40  185.37  189
B   4.72    4.47    6
B   6.36    5.64    7
B   6.98    5.64    8
B   75.64   51.34   38
B   161.28  113.02  68
B   217.29  156.14  98
B   256.22  181.19  129
B   301.87  215.17  160
B   339.54  247.23  190
B   370.70  276.45  221
B   396.73  301.40  251
我得到以下警告:

<ipython-input-83-f4f50b80623a>:3: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.
  df=sheet5.groupby(['item'])['x', 'y', 'days'].cumsum()
:3:FutureWarning:将不推荐使用多个键(隐式转换为键的元组)进行索引,请改用列表。
df=sheet5.groupby(['item'])['x','y','days'].cumsum()
我有一些问题:

  • 是否有方法执行此计算并避免收到此警告

  • 我注意到,当我没有将item列设置为索引时,它不会显示在结果中。为什么会这样

  • 是否可以只在一列中执行cumsum(),并从day列中获取包含原始列和cumsum()结果列的数据帧


  • 谢谢

    1/使用
    dataframe.groupby
    (即用双方括号包装列)

    2/我猜groupby上的
    cumsum
    通过强制groupby的
    split apply combine
    过程的
    combine
    步骤使用原始索引,如
    transform
    。这只是我的猜测,因为我还没有检查
    groupby.cumsum
    的源代码

    3/对于您编辑的问题3,您可以在
    项目上进行相同的分组,但在
    系列上进行
    cumsum
    。在
    天数列上进行分组

    df['days_c'] = df.groupby('item')['days'].cumsum()
    
    Out[876]:
                x        y  days  days_c
    item
    A      0.2076   0.0000     4       4
    A      0.0000   0.0000     1       5
    A     55.9240  39.8879    31      36
    A     54.5062  46.2022    30      66
    A     38.6522  32.9306    31      97
    A     27.5890  25.7896    30     127
    A     23.4207  21.9209    31     158
    A     21.1067  18.6405    31     189
    B      4.7236   4.4775     6       6
    B      1.6416   1.1710     1       7
    B      0.6177   0.0000     1       8
    B     68.6652  45.7007    30      38
    B     85.6364  61.6806    30      68
    B     56.0095  43.1121    30      98
    B     38.9339  25.0558    31     129
    B     45.6508  33.9727    31     160
    B     37.6672  32.0657    30     190
    B     31.1604  29.2204    31     221
    B     26.0266  24.9480    30     251
    

    如果可以的话,还有一个问题。关于我的第三个问题,是否可以在x和y列中使用sum(),在days列()中使用cumsum()?
    cumsum
    累积地添加每一行并返回相同数量的行
    sum
    将减少每组
    项的行数
    。您想要的输出是什么?你能为问题3添加所需的输出吗?嗨,安迪,我编辑了问题3。我想在days列中执行cumsum,其余部分保持在原始数据帧中。最后,我想获得一个包含所有原始列和cumsum()列的数据帧。我尝试使用sheet5['days\u c']=sheet5.groupby['days'].cumsum(),但没有得到我想要的结果expected@Pablo:我编辑了问题3的答案。检查我的最新答案hi@Andy L.一切都很完美。非常感谢你!
    df['days_c'] = df.groupby('item')['days'].cumsum()
    
    Out[876]:
                x        y  days  days_c
    item
    A      0.2076   0.0000     4       4
    A      0.0000   0.0000     1       5
    A     55.9240  39.8879    31      36
    A     54.5062  46.2022    30      66
    A     38.6522  32.9306    31      97
    A     27.5890  25.7896    30     127
    A     23.4207  21.9209    31     158
    A     21.1067  18.6405    31     189
    B      4.7236   4.4775     6       6
    B      1.6416   1.1710     1       7
    B      0.6177   0.0000     1       8
    B     68.6652  45.7007    30      38
    B     85.6364  61.6806    30      68
    B     56.0095  43.1121    30      98
    B     38.9339  25.0558    31     129
    B     45.6508  33.9727    31     160
    B     37.6672  32.0657    30     190
    B     31.1604  29.2204    31     221
    B     26.0266  24.9480    30     251