大熊猫 - 行添加

时间:2017-07-15 20:25:47

标签: python pandas

我有以下数据框集:

     Date         Amount     Total
  0 2017-02-11     -11.7     
  1 2017-02-08    -110.7    1377.4
  2 2017-02-08      -1.2    
  3 2017-02-07     -11.1    1489.3
  4 2017-02-07       8.3    1500.4
  5 2017-02-03      -5.2    1492.1
  6 2017-02-01     -12.0    

由于存在可能缺少总量的数据集,我必须自己计算一个。我想到的最好的方法可能是搜索最新的现有行,其中包含类似

的总值
df = df.sort_values(by=['Date'], ascending=[False])
df[pd.notnull(df.Total)].iloc[0]

这会给我:

5 2017-02-08      -5.2    1492.1

然后使用总值1492.1作为基础来计算所有其他值。 有没有一种简单的方法可以做到这一点,或者我是否必须通过计算上一个/下一个日期的总计的数据集进行迭代?

编辑: 总计应使用x的先前总数计算并添加所有负数/减去所有正数直到x。

例如,要计算索引2的总数(2017-02-08),我必须取1377.4并添加110.7以获得索引2的总和,然后是1488.1

1 个答案:

答案 0 :(得分:1)

您可以使用cumsum然后加上基数。 (df [:: - 1] .Total-df [:: - 1] .Amount.cumsum())。max()给出最后一行之前的总和。然后,您可以将该基础添加到cumsum结果中。此外,当您的数据从下往上添加时,您需要先使用df [:: - 1]反转行。

df['Total_New']=df[::-1].Amount.cumsum()+(df[::-1].Total-df[::-1].Amount.cumsum()).max()

df
Out[219]: 
         Date  Amount   Total  Total_New
0  2017-02-11   -11.7     NaN     1365.7
1  2017-02-08  -110.7  1377.4     1377.4
2  2017-02-08    -1.2     NaN     1488.1
3  2017-02-07   -11.1  1489.3     1489.3
4  2017-02-07     8.3  1500.4     1500.4
5  2017-02-03    -5.2  1492.1     1492.1
6  2017-02-01   -12.0     NaN     1497.3