gpt4 book ai didi

python - Pandas 检测连续的负数并返回值

转载 作者:太空宇宙 更新时间:2023-11-03 20:25:37 25 4
gpt4 key购买 nike

我有一个如下所示的数据框,我需要提取出现两个连续负变化值的季度。例如。 2000q4。它必须是第一个负变化的季度,而不是 2001q1

我还需要负季度之后的前两个正季度的最后一个季度,例如 2002q1

         Quarter    GDP  Change
Quarter
2000q1 2000q1 12359.1 NaN
2000q2 2000q2 12592.5 233.4
2000q3 2000q3 12607.7 15.2
2000q4 2000q4 12679.3 -71.6
2001q1 2001q1 12643.3 -36.0
2001q2 2001q2 12710.3 67.0
2001q3 2001q3 12670.1 -40.2
2001q4 2001q4 12705.3 35.2
2002q1 2002q1 12822.3 117.0
2002q2 2002q2 12893.0 70.7
2002q3 2002q3 12955.8 62.8
2002q4 2002q4 12964.0 8.2

我尝试过使用 apply 以及在 where 。应用不起作用,因为我无法使用类次。

df['bool'] = df['change'].where(df['change'] < 0).where(df['change'].shift() < 0)

我期望的结果是 2000q4 和 2002q1

最佳答案

您需要正确验证条件:

cond1=(df['Change'].shift(1)>0) & (df['Change']<0) & (df['Change'].shift(-1)<0)
cond2=(df['Change'].shift(2)<0) & (df['Change'].shift(1)>0) & (df['Change']>0)
cond = cond1 | cond2
df1=df[cond1] #to show the rows that verify the condition1
df2=df[cond2] #to show the rows that verify the condition2

现在,如果您想将验证编码的值保存在 df['bool'] 中,请使用:

df['bool']=df.loc[cond,'Change']

您还可以使用where:

df['bool'] = df['Change'].where(cond)
<小时/>

输出df1,df2:

df1

Quarter.1 GDP Change
Quarter
2000q4 2000q4 12679.3 -71.6
<小时/>
 df2

Quarter.1 GDP Change
Quarter
2002q1 2002q1 12822.3 117.0
<小时/>

输出df:

        Quarter.1      GDP  Change   bool
Quarter
2000q1 2000q1 12359.1 NaN NaN
2000q2 2000q2 12592.5 233.4 NaN
2000q3 2000q3 12607.7 15.2 NaN
2000q4 2000q4 12679.3 -71.6 -71.6
2001q1 2001q1 12643.3 -36.0 NaN
2001q2 2001q2 12710.3 67.0 NaN
2001q3 2001q3 12670.1 -40.2 NaN
2001q4 2001q4 12705.3 35.2 NaN
2002q1 2002q1 12822.3 117.0 117.0
2002q2 2002q2 12893.0 70.7 NaN
2002q3 2002q3 12955.8 62.8 NaN
2002q4 2002q4 12964.0 8.2 NaN

df[条件]

        Quarter.1      GDP  Change   bool
Quarter
2000q4 2000q4 12679.3 -71.6 -71.6
2002q1 2002q1 12822.3 117.0 117.0

关于python - Pandas 检测连续的负数并返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57843425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com