我有一个大数据框,我想添加一个列,如果该行没有通过过滤器,则为-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 == Y
和False
,并尝试了:
df.loc[bool4, 'new_index'] = df.loc[bool4, 'new_index'].apply([lambda i: i for i in range(sum(bool4))])
但它不会更新new_index
列(将其留空)。
答案 0 :(得分:2)
让我们使用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