我正在尝试比较年度 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 年 GDP(以数十亿美元为单位)”的行,以查找出现负增长的季度
目前,我已经迭代了该列并创建了一个列表以便稍后追加。我意识到这可能是一个糟糕的方法,我想知道是否有人可以帮助我改进我的代码:
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 存在问题,因为它没有任何内容可以与之比较(因此是监护人代码)作为开始,这并不是什么大问题,因为我们可以告诉它以“False”开始
我可以将列表附加到数据帧并继续,但我目前正在学习 Pandas,如果可能的话,希望使用矢量化正确地完成此操作
最佳答案
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
关于python - 数据帧迭代以比较行而无需 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43679703/