Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python dataframe枚举通过筛选器的行_Python_Pandas_Dataframe - Fatal编程技术网

Python dataframe枚举通过筛选器的行

Python dataframe枚举通过筛选器的行,python,pandas,dataframe,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

我有一个大数据框,如果行没有通过过滤器,我想添加一个-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\u index
是我根据列
passed
添加的。 没有iErrors我怎么做? 我创建了一个系列
bool4
,它是
True
,其中
passed==Y
False
,否则,尝试:

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

但是它不会更新
new\u index
列(将其保留为空)。

让我们使用
eq
cumsum
add
mask

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

因为我只需要那些通过条件的行的计数器。请使用cumsum to作为计数器。非常好;)plus1@jezrael谢谢。或者
df['new_index']=df.passed.eq('Y').cumsum().add(-1)。其中(df.passed!='N',-1)