2017-08-16 9 views
0

私はパンダスdfを持っています。df['Battery capacity'] = df['total_load'].cumsum() + 5200 "total_load"の値を "Battery_capacity"の値で減算します。パンダ - パンダデータフレームのcumsum()コードの加減算を中断する

enter image description here

だから、今、私は特定の値で追加/減算を壊し、私のコードに何かを追加したいと思います。たとえば、私は5200より高い値を望んでいません。だから、13:00:00に合算を5200で停止するといいでしょう。 私は自分のコードでそれをどのように実装できますか? Scott Bostonが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 with 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ですossibleでも['clip']を使う(http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.clip.html) – jezrael

+1

@jezrael私が知らなかったもう一つの方法は、パンダに存在していたライブラリ。ありがとうございました。 –

関連する問題