我有一个数据框,其中包含一个字符串列,我想删除最后一个名称出现后的所有行。
first_name
Andy
Josh
Mark
Tim
Alex
Andy
Josh
Mark
Tim
Alex
Andy
Josh
Mark
我想要做的是,在最后一次出现Alex之后删除行,因此删除Andy,Josh和Mark的行。
我已经想到了在第一次出现之前删除的方法,如下所示:
df=df[(df.first_name== 'Alex').idxmax():]
,但不知道如何删除最后几行。谢谢!
argmax
df.iloc[:len(df) - (df.first_name.to_numpy() == 'Alex')[::-1].argmax()]
first_name
0 Andy
1 Josh
2 Mark
3 Tim
4 Alex
5 Andy
6 Josh
7 Mark
8 Tim
9 Alex
last_valid_index
df.loc[:df.where(df == 'Alex').last_valid_index()]
df.loc[:df.first_name.eq('Alex')[::-1].idxmax()]
df.iloc[:np.flatnonzero(df.first_name.eq('Alex')).max() + 1]
这太傻了!
df[np.logical_or.accumulate(df.first_name.eq('Alex')[::-1])[::-1]]
mask
and bfill
df[df['first_name'].mask(df['first_name'] != 'Alex').bfill().notna()]
first_name
0 Andy
1 Josh
2 Mark
3 Tim
4 Alex
5 Andy
6 Josh
7 Mark
8 Tim
9 Alex
cumsum
and idxmax
df.loc[:(df['first_name'] == 'Alex').cumsum().idxmax()]
first_name
0 Andy
1 Josh
2 Mark
3 Tim
4 Alex
5 Andy
6 Josh
7 Mark
8 Tim
9 Alex
cumsum
and max
u = (df['first_name'] == 'Alex').shift().cumsum()
df[u < u.max()]
first_name
1 Josh
2 Mark
3 Tim
4 Alex
5 Andy
6 Josh
7 Mark
8 Tim
9 Alex