Python dataframe枚举通过筛选器的行
我有一个大数据框,如果行没有通过过滤器,我想添加一个-1的列,如果行通过过滤器,我想添加一个索引。 例如,在数据帧中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
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)