如果在另一列中满足某些条件,如何从不同的列打印值?

时间:2017-11-07 12:21:25

标签: python python-3.x pandas numpy dataframe

如果在另一列中满足某些条件,我需要从不同的列打印一个值。

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)

诀窍。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

IIUC这应该有效:

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