如何根据索引值在数据框列中查找第一个True值

时间:2017-12-01 05:10:33

标签: python pandas numpy

运行以下代码时出错。

s1 = pd.Series(dfs.index)
s2 = []
for x in df.index:   
    for i in s1:
       if x > i & df['test'].loc[x] == True:
           s2.append(df['shiftdt'])

dfs =是经济衰退开始的年份和qt

16     1949q1
34     1953q3
51     1957q4
255    2008q4
Name: shiftdt, dtype: object

df看起来像这样:

    Unnamed: 4 GDP      shift1    shift2 shiftdt   test  
14      1948q4      280.7    279.5    272.9  1948q3   True  
15      1949q1      275.4    280.7    279.5  1948q4  False
16      1949q2      271.7    275.4    280.7  1949q1  False
17      1949q3      273.3    271.7    275.4  1949q2  False
18      1949q4        271    273.3    271.7  1949q3  False 
19      1950q1      281.2      271    273.3  1949q4  False
20      1950q2      290.7    281.2      271  1950q1   True
21      1950q3      308.5    290.7    281.2  1950q2   True

df是像dfs中的那些年份列表,但也包括GDP,GDP的移位列,第一个移位列的另一个移位列以及如果gdp> 1,则布尔值为True。 shift1和shift1> shift2。我试图找出经济衰退的结束但我的问题是,有很多时候连续两个季度比前一个季度更好。我的目标是使用dfs的索引值(与df一致)并在每个索引值后获得第一个True。 (对不起,解释很复杂)

1 个答案:

答案 0 :(得分:1)

import numpy as np

创建索引值为True的列:

df['new_index'] = np.where(df.test == True, df.index, np.nan)

回填:

df.new_index = df.new_index.new_index.bfill()