当不满足条件时,通过比较前几行中其他列的值,尝试将总和值重置回零需要帮助吗

2024-10-03 13:27:59 发布

您现在位置:Python中文网/ 问答频道 /正文

如果价格连续两次上涨,我试图给出1或是。我尝试使用cumsum,但如果它不是真的,我不知道如何将值重置回零

df["Increased Twice?"] = ((df.shift(1)["Price Change"] == df3bet["Price Change"])).cumsum()

这是我的代码的结果

ProductID  Price Change  Increased Twice?
 2d3Q       Increase            0
 2d3Q       Increase            1
 2d3Q       Decrease            1
 2d3Q       Increase            1
 2d3Q       Increase            2
 2d3Q       Decrease            2
 2d3Q       Increase            2
 2d3Q       Increase            3 
 

这就是我想要的

ProductID  Price Change  Increased Twice?
 2d3Q       Increase            0
 2d3Q       Increase            1
 2d3Q       Decrease            0
 2d3Q       Increase            0
 2d3Q       Increase            1
 2d3Q       Decrease            0
 2d3Q       Increase            0
 2d3Q       Increase            1 

我也尝试过一些不同的if-then语句,但我还没有成功


Tags: 代码dfshift价格changeprice重置increase
2条回答

试试numpy.where()

import numpy as np

df['Increased Twice?'] = np.where(df['Price Change'] == df.shift(1)['Price Change'], 1, 0)

让我们试试,首先找到“增加”的位置,然后根据“减少”创建组,然后求和并检查2次增加的计数

df['Increased Twice?'] = ((df['Price Change'] == 'Increase')\
                          .groupby((df['Price Change'] == 'Decrease').cumsum())\
                          .cumsum() == 2).astype(int)

输出:

  ProductID Price Change  Increased Twice?
0      2d3Q     Increase                 0
1      2d3Q     Increase                 1
2      2d3Q     Decrease                 0
3      2d3Q     Increase                 0
4      2d3Q     Increase                 1
5      2d3Q     Decrease                 0
6      2d3Q     Increase                 0
7      2d3Q     Increase                 1

相关问题 更多 >