Boolean基于不同Index值的Criteria检入Pandas DataFrame

时间:2014-09-28 14:13:53

标签: python pandas dataframe

我想计算在不同索引值的Pandas DataFrame中满足两个条件的实例数。剪切的DataFrame是:

                GDP  USRECQ
DATE                        
1947-01-01       NaN       0
1947-04-01       NaN       0
1947-07-01       NaN       0
1947-10-01       NaN       0
1948-01-01  0.095023       0
1948-04-01  0.107998       0
1948-07-01  0.117553       0
1948-10-01  0.078371       0
1949-01-01  0.034560       1
1949-04-01 -0.004397       1

我想计算USRECQ[DATE+1]==1 and GDP[DATE]>a if GDP[DATE]!='NAN'的观察次数。

引用DATE+1DATE我的意思是USRECQ的值应该在检查GDP的值的后续日期进行检查。不幸的是,我不知道如何在我的选择中处理不同时间指数的交易。有人可以告诉我如何正确计算实例数量吗?

2 个答案:

答案 0 :(得分:2)

实现这一目标的一个方法是创建一个新列,以显示' USRECQ'的下一个值。是:

>>> df['USRECQ NEXT'] = df['USRECQ'].shift(-1)
>>> df
         DATE       GDP  USRECQ  USRECQ NEXT
0  1947-01-01       NaN       0            0
1  1947-04-01       NaN       0            0
2  1947-07-01       NaN       0            0
3  1947-10-01       NaN       0            0
4  1948-01-01  0.095023       0            0
5  1948-04-01  0.107998       0            0
6  1948-07-01  0.117553       0            0
7  1948-10-01  0.078371       0            1
8  1949-01-01  0.034560       1            1
9  1949-04-01 -0.004397       1          NaN

然后您可以根据您的要求过滤您的DataFrame,如下所示:

>>> a = 0.01
>>> df[(df['USRECQ NEXT'] == 1) & (df['GDP'] > a) & (pd.notnull(df['GDP']))]

         DATE       GDP  USRECQ  USRECQ NEXT
7  1948-10-01  0.078371       0            1
8  1949-01-01  0.034560       1            1

要计算DataFrame中的行数,您只需使用内置函数len

答案 1 :(得分:1)

我认为DataFrame.shift方法是您在查看下一个索引时所寻求的关键。

Numpy的逻辑表达式对于这些事情来说非常方便。

因此,如果df是您的数据帧,那么我认为您正在寻找的是

count = df[np.logical_and(df.shift(-1)['USRECQ'] == 1,df.GDP > -0.1)]

我用来测试此示例的示例位于github