pandas dataframe枚举通过过滤器

时间:2017-07-18 13:31:41

标签: python pandas dataframe

我有一个大数据框,我想添加一个列,如果该行没有通过过滤器,则为-1,如果它通过过滤器,则为索引。 例如,在数据框中

    b   f   j    passed  new_index
1   12  5   6         Y          0
2   4   99  2         Y          1
3   10  77  16        N         -1
4   4   99  2         Y          2
5   10  77  16        N         -1
6   4   99  2         Y          3
7   10  77  16        N         -1

我根据列new_index添加了passed列。 如果没有它,我该怎么做? 我创建了一个bool4系列True,其中passed == YFalse,并尝试了:

df.loc[bool4, 'new_index'] = df.loc[bool4, 'new_index'].apply([lambda i: i for i in range(sum(bool4))])

但它不会更新new_index列(将其留空)。

1 个答案:

答案 0 :(得分:2)

让我们使用eqcumsumaddmask

df['new_index'] = df.passed.eq('Y').cumsum().add(-1).mask(df.passed == 'N', -1)

输出:

    b   f   j passed  new_index
1  12   5   6      Y          0
2   4  99   2      Y          1
3  10  77  16      N         -1
4   4  99   2      Y          2
5  10  77  16      N         -1
6   4  99   2      Y          3
7  10  77  16      N         -1