2017-08-16 96 views
0

我有一个熊猫df和df['Battery capacity'] = df['total_load'].cumsum() + 5200 我用“battery_capacity”中的值减去“total_load”中的值。熊猫 - 破坏熊猫数据帧中cumsum()代码的加/减

enter image description here

所以,现在我想的东西添加到我的代码,打破了添加/在一定值减去。例如,我不想要比5200更高的值。因此,假设在13:00:00,加起来应该停在5200. 我怎么能在我的代码中实现?斯科特波士顿提出了一个if语句,但你会如何使用我的代码df['Battery capacity'] = df['total_load'].cumsum(if battery capacity = 5200, then stop adding) + 5200 我应该尝试写一个函数吗?

输出应该是这样的:

time    total_load battery capacity 
2016-06-01 12:00:00 2150  4487.7 
2016-06-01 13:00:00 1200  5688 (but should stop at 5200) 
2016-06-01 14:00:00 1980  5200 (don't actually add values now because we are still at 5200) 

回答

2

您可以使用np.clip夹上限和下限。

df['Battery capacity'] = np.clip(df['total_load'].cumsum() + 5200,-np.inf,5200) 

或者作为@jezrael指出熊猫系列具有clip方法:

df['Battery capacity'] = (df['total_load'].cumsum() + 5200).clip(-np.inf,5200) 

输出:

     Battery capacity total_load 
2016-01-01 00:00:00   4755.0000 -445.0000 
2016-01-01 01:00:00   4375.0000 -380.0000 
2016-01-01 02:00:00   4025.0000 -350.0000 
2016-01-01 03:00:00   3685.0000 -340.0000 
2016-01-01 04:00:00   2955.4500 -729.5500 
2016-01-01 05:00:00   1870.4500 -1085.0000 
2016-01-01 06:00:00   879.1500 -991.3000 
2016-01-01 07:00:00  -2555.8333 -3434.9833 
2016-01-01 08:00:00  -1952.7503 603.0830 
2016-01-01 09:00:00   -864.7503 1088.0000 
2016-01-01 10:00:00   1155.2497 2020.0000 
2016-01-01 11:00:00   2336.2497 1181.0000 
2016-01-01 12:00:00   4486.2497 2150.0000 
2016-01-01 13:00:00   5200.0000 1200.8330 
2016-01-01 14:00:00   5200.0000 1980.0000 
2016-01-01 15:00:00   5200.0000 -221.2667 

现在,如果你不希望值,低于去零替换-np.inf为0.

     Battery capacity total_load 
2016-01-01 00:00:00   4755.0000 -445.0000 
2016-01-01 01:00:00   4375.0000 -380.0000 
2016-01-01 02:00:00   4025.0000 -350.0000 
2016-01-01 03:00:00   3685.0000 -340.0000 
2016-01-01 04:00:00   2955.4500 -729.5500 
2016-01-01 05:00:00   1870.4500 -1085.0000 
2016-01-01 06:00:00   879.1500 -991.3000 
2016-01-01 07:00:00   0.0000 -3434.9833 
2016-01-01 08:00:00   0.0000 603.0830 
2016-01-01 09:00:00   0.0000 1088.0000 
2016-01-01 10:00:00   1155.2497 2020.0000 
2016-01-01 11:00:00   2336.2497 1181.0000 
2016-01-01 12:00:00   4486.2497 2150.0000 
2016-01-01 13:00:00   5200.0000 1200.8330 
2016-01-01 14:00:00   5200.0000 1980.0000 
2016-01-01 15:00:00   5200.0000 -221.2667 
+1

也许是p也可以使用['clip'](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.clip.html) – jezrael

+1

@jezrael另一种我不知道的方法存在于熊猫库。谢谢。 –