2017-11-07 10 views
1

ある条件が他の列で満たされている場合は、別の列から値を印刷する必要があります。 特定の条件が他の列で満たされている場合、別の列から値を印刷する方法はありますか?

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 

信号は、POS値のNEG値の-1及び+1であるから成ります。

条件は、2つの連続する負の期間がある年を印刷する必要があります。

rec_start=(gdp["signal"]==-1) & (gdp["signal"].shift(-1)==-1) 
gdp["start"]=rec_start # which gives a boolean mask 

RECとスタートは同じ

 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 

は、今私はちょうど2連続でTruesのための年間の行を印刷するには、右sintaxを把握する必要があります。

foo=gdp.ix[(gdp["signal"]==-1) & (gdp["signal"].shift(-1)==-1)]["year"].iloc[0] print(foo)

にしようとして

はトリックをしました。

ご協力いただきありがとうございます。

+0

あなたのデータはどこにありますか? –

+0

えええええええええええええええええええええええええええええええええええええええええええええええええええええええええんだん: – Keulando

+0

'print(df.head(10))'と質問に貼り付けてください。 –

答えて

1

IIUCこれは動作するはずです:

df.year[np.where((df.signal==-1),(df.signal==df.signal.shift‌​()),0).astype('bool'‌​)] 
+0

完璧!衰退の第1四半期を得るために.shift()のためのパラメータとして-1を使い、最後に.iloc [0]が衰退の開始時にstr形式で戻る/印刷する必要がありました。ありがとうございました! – Keulando

関連する問題