簡體   English   中英

Pandas 如果為正,則將負值與先前值相加

[英]Pandas sum negative values with previous value if positive

用語言來表達我的問題有點困難。 我有一個具有正值和負值的 dataframe。

2012-01-01    58.0
2012-06-01     8.0
2012-07-01    10.0
2013-01-01    50.0
2013-02-01    -6.0
2013-03-01    -8.0
2013-04-01    20.0
2013-07-01     3.0
2013-12-01     0.0
2014-02-01    88.0
2014-03-01   -40.0

如果它是正數,我想將一行中的負值與前一行值相加,直到沒有負數。

例如:最終列表應該是: [58,8,10, 50+(-6-8),20.0, 3.0, 0.0, 88+(-40)]

2012-01-01    58.0
2012-06-01     8.0
2012-07-01    10.0
2013-01-01    36.0
2013-04-01    20.0
2013-07-01     3.0
2013-12-01     0.0
2014-02-01    48.0

dataframe 很大,所以我真的更喜歡pandas解決方案。

您可以使用cumsum識別負塊,並將其用於 groupby:

(df.groupby(df['value'].ge(0).cumsum(), as_index=False)
   .agg({'date':'first','value':'sum'})
)

Output:

         date  value
0  2012-01-01   58.0
1  2012-06-01    8.0
2  2012-07-01   10.0
3  2013-01-01   36.0
4  2013-04-01   20.0
5  2013-07-01    3.0
6  2013-12-01    0.0
7  2014-02-01   48.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM