所以我必须遍历每个季度,确定衰退何时开始和结束。
我制定了以下业务规则
如果本季度GDP低于前一个季度且前一个季度小于不具有衰退标志的前一个,则标志衰退开始。
如果本季度GDP>前一个和前一个具有衰退标志或开始衰退标志,则该衰退标志
如果本季度GDP>上一个和上一个>上一个但上一个2号有衰退标志,则将这两个标记为衰退结束
其他标记为零的非衰退
我不知道该怎么做,遍历每一行并创建一个if,如果该列是衰退的开始,衰退,衰退的结束或没有衰退,则将生成一个新列来标记
我如何为每一行做 如果上一行是x,而上一行的右侧是Y 另外,如果上一行之前的行是x,而上一行和右边的第1列是Y?
Output:
Quarter GDP Recession Flag
1947q1 100 0
1947q2 110 0
1947q3 120 1
答案 0 :(得分:0)
让df
为包含季度,GDP,经济衰退和国旗的数据框。 .shift()
方法应该在这里起作用:
df.columns = ['Quarter', 'GDP', 'Recession', 'Flag']
df['GDP_lag1'] = df['GDP'].shift(1)
df['GDP_lag2'] = df['GDP'].shift(2)
df['flag_lag1'] = df['Recession'].shift(1)
df['flag_lag2'] = df['Recession'].shift(2)
所以现在您的专栏是:
df.columns = ['Quarter', 'GDP', 'Recession', 'Flag', 'GDP_lag1', 'GDP_lag2', 'flag_lag1', 'flag_lag2']
def rec_flag(row):
gdp = row[1]
flag = row[2]
p_gdp = row[4]
pp_gdp = row[5]
p_flag = row[6]
pp_flag = row[7]
if (gdp < p_gdp) & (p_gdp < pp_gdp) & (p_flag == 0):
return 1
elif (gdp > p_gdp) & (p_flag == 1):
return 1
elif (gdp > p_gdp) & (p_gdp > pp_gdp) & (pp_flag == 1):
return 0
else:
return 0
df['Flag'] = df.apply(rec_flag)
答案 1 :(得分:0)
不在我的办公桌前,但这可能有用吗?
df = myDataFrame
prev = None
for index, row in df.iterrows():
if prev:
#Check if in a recession currently
if row[2] = 2:
if prev[1] > row[1]:
row[2] = 3
#Check for more conditions
prev = row
continue
我在手机上,很难输入,但这应该可以让您开始。如您所见,繁琐的工作会将您带到您想去的地方。