我试图比较年度GDP值,以找出数据中的衰退。
GDP in billions of current dollars GDP in billions of chained 2009 dollars
Quarterly (Seasonally adjusted annual rates)
1947q1 243.1 1934.5
1947q2 246.3 1932.3
1947q3 250.1 1930.3
1947q4 260.3 1960.7
1948q1 266.2 1989.5
这是我的数据的.head()。我比较了数十亿美元的2009年美国国内生产总值和国内生产总值的行数。找到负增长的季度
目前我已经遍历该列并创建了一个列表以便稍后追加。我意识到这可能是一个糟糕的方法,我想知道是否有人可以帮助我改进我的代码:
mask = []
for i in range(0,len(df)):
try:
if df.ix[i,2] > df.ix[i-1,2] : mask.append('False')
else : mask.append('True')
except:
mask.append('False')
continue
代码在条目1中存在问题,因为它没有任何内容可以与它(因此是守护代码)进行比较,因为我们可以告诉它开始“假”'
我可以将列表附加到数据框并继续,但我现在正在学习Pandas并希望在可能的情况下使用矢量化正确地执行此操作
答案 0 :(得分:2)
IIUC您可以使用矢量化Series.diff()方法:
In [86]: df.iloc[:, 2].diff().lt(0)
Out[86]:
0 False
1 True
2 True
3 False
4 False
Name: c, dtype: bool
如果您需要Vanilla Python列表:
In [93]: df.iloc[:, 2].diff().lt(0).tolist()
Out[93]: [False, True, True, False, False]
来源DF:
In [87]: df
Out[87]:
a b c
0 1947q1 243.1 1934.5
1 1947q2 246.3 1932.3
2 1947q3 250.1 1930.3
3 1947q4 260.3 1960.7
4 1948q1 266.2 1989.5
差
In [88]: df['c'].diff()
Out[88]:
0 NaN
1 -2.2
2 -2.0
3 30.4
4 28.8
Name: c, dtype: float64