如果在另一列中满足某些条件,我需要从不同的列打印一个值。
df由4列年份,gdp,差异和信号
组成df=pd.read_excel("file.xls", names = ["year","GDP"])
gdp["diff"] = gdp["GDP"].diff(1)
signal = gdp["diff"].clip(lower = -1.0, upper=1.0)
gdp["signal"] = signal
对于负值,信号为-1,对于pos值,信号为+1。
条件是我必须打印连续2个负期的年份。
rec_start=(gdp["signal"]==-1) & (gdp["signal"].shift(-1)==-1)
gdp["start"]=rec_start # which gives a boolean mask
rec和start是相同的
year GDP diff signal start
0 1999q4 12323.3 NaN NaN False
1 2000q1 12359.1 35.8 1.0 False
2 2000q2 12592.5 233.4 1.0 False
3 2000q3 12607.7 15.2 1.0 False
4 2000q4 12679.3 71.6 1.0 False
5 2001q1 12643.3 -36.0 -1.0 False
6 2001q2 12710.3 67.0 1.0 False
7 2001q3 12670.1 -40.2 -1.0 False
8 2001q4 12705.3 35.2 1.0 False
9 2002q1 12822.3 117.0 1.0 False
现在我只需要弄清楚正确的sintax打印连续2个Trues的年份行。
尝试
foo=gdp.ix[(gdp["signal"]==-1) & (gdp["signal"].shift(-1)==-1)]["year"].iloc[0]
print(foo)
诀窍。
非常感谢任何帮助!
答案 0 :(得分:1)
IIUC这应该有效:
df.year[np.where((df.signal==-1),(df.signal==df.signal.shift()),0).astype('bool')]