【问题标题】:pandas cumulative subtraction in a column熊猫在一列中的累积减法
【发布时间】:2019-01-23 03:23:26
【问题描述】:

我有一个数据框,我需要从基线开始进行燃尽并减去所有值,基本上我正在寻找一个 DataFrame().cumsum(0) 的对立面:

               In Use
Baseline       3705.0
February 2018     0.0
March 2018        2.0
April 2018       15.0
May 2018         30.0
June 2018        14.0
July 2018       797.0
August 2018    1393.0
September 2018   86.0
October 2018    374.0
November 2018    21.0
December 2018     0.0
January 2019      0.0
February 2019     0.0
March 2019        0.0
April 2019        2.0
unknown         971.0

我找不到要执行的功能,或者我没有按正确的标签/名称查找。

如何做到这一点?

【问题讨论】:

  • 预期输出是什么?

标签: python python-3.x pandas numpy


【解决方案1】:

DataFrameGroupBy.diffdiff创建的组使用,lt<和累积总和共同映射:

g = df['Use'].diff().lt(0).cumsum()
df['new'] = df['Use'].groupby(g).diff().fillna(df['Use'])
print (df)
                In     Use     new
0         Baseline  3705.0  3705.0
1    February 2018     0.0     0.0
2       March 2018     2.0     2.0
3       April 2018    15.0    13.0
4         May 2018    30.0    15.0
5        June 2018    14.0    14.0
6        July 2018   797.0   783.0
7      August 2018  1393.0   596.0
8   September 2018    86.0    86.0
9     October 2018   374.0   288.0
10   November 2018    21.0    21.0
11   December 2018     0.0     0.0
12    January 2019     0.0     0.0
13   February 2019     0.0     0.0
14      March 2019     0.0     0.0
15      April 2019     2.0     2.0
16         unknown   971.0   969.0

【讨论】:

    【解决方案2】:

    您可以将pd.Series.difffillna 一起使用。这是一个演示:

    df = pd.DataFrame({'A': np.random.randint(0, 10, 5)})
    
    df['B'] = df['A'].cumsum()
    df['C'] = df['B'].diff().fillna(df['B']).astype(int)
    
    print(df)
    
       A   B  C
    0  1   1  1
    1  4   5  4
    2  4   9  4
    3  2  11  2
    4  1  12  1
    

    【讨论】:

      猜你喜欢
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多