【问题标题】:Python - Pandas - Unroll / Remove Cumulative SumPython - Pandas - 展开/删除累积和
【发布时间】:2016-07-26 21:48:50
【问题描述】:

我有一个如下的数据框(具体数据如下,这是通用的)。 no 给了我一个累积的总和:

                 no
name day           
Jack Monday      10
     Tuesday     40
     Wednesday   90
Jill Monday      40
     Wednesday  150

我想“展开”累积总和,给我这样的东西:

print df
   name        day   no
0  Jack     Monday   10
1  Jack    Tuesday   30
2  Jack  Wednesday   50
3  Jill     Monday   40
4  Jill  Wednesday  110

本质上,我想做类似以下的事情,但反过来: Pandas groupby cumulative sum

【问题讨论】:

  • 这里有多少个索引
  • 我不确定发生了什么变化,但我清理了我的文件并重新运行了您的代码,现在它可以工作了。为了清楚起见,我删除了对任何错误的提及。感谢您的帮助。

标签: python python-2.7 pandas dataframe


【解决方案1】:

这是一个基于 zip 的方法。它创建两个系列,第二个偏移 1,然后减去两者之间的差。

[n-nn for n,nn in zip(df['No'],df['No'][1:]+[0])]

【讨论】:

    【解决方案2】:

    如果我理解正确,您可以执行以下操作:

    In [103]:
    df.groupby(level=0).diff().fillna(df).reset_index()
    
    Out[103]:
       name        day     no
    0  Jack     Monday   10.0
    1  Jack    Tuesday   30.0
    2  Jack  Wednesday   50.0
    3  Jill     Monday   40.0
    4  Jill  Wednesday  110.0
    

    所以groupby第一个索引级别并调用diff来计算每组的行间差异并用原始df值填充NaN值并调用reset_index

    【讨论】:

    • @AmiTavory 是的,我以为我会得到负值,我会删除它
    • 请使用示例数据和代码编辑您的问题,以演示问题和所需的输出
    猜你喜欢
    • 2018-02-28
    • 2013-02-12
    • 2017-05-16
    • 1970-01-01
    • 2019-02-15
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    相关资源
    最近更新 更多