我有以下数据框集:
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
答案 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