Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.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 如何在最后一次出现值后删除所有行?_Python_Pandas - Fatal编程技术网

Python 如何在最后一次出现值后删除所有行?

Python 如何在最后一次出现值后删除所有行?,python,pandas,Python,Pandas,我有一个带有字符串列的dataframe,我希望在名称最后一次出现之后删除所有行 first_name Andy Josh Mark Tim Alex Andy Josh Mark Tim Alex Andy Josh Mark 我想在Alex最后一次出现后删除行,所以删除Andy、Josh和Mark的行 我想我会在第一次出现之前删除:df=df[(df.first\u name=='Alex').idxmax():],但不知道如何删除最后一行 谢谢 mask和bfill cumsum和id

我有一个带有字符串列的dataframe,我希望在名称最后一次出现之后删除所有行

first_name
Andy
Josh
Mark
Tim
Alex
Andy
Josh
Mark
Tim
Alex
Andy
Josh
Mark
我想在Alex最后一次出现后删除行,所以删除Andy、Josh和Mark的行

我想我会在第一次出现之前删除:
df=df[(df.first\u name=='Alex').idxmax():]
,但不知道如何删除最后一行

谢谢

mask
bfill

cumsum
idxmax

cumsum
max
u=(df['first_name']='Alex').shift().cumsum()
df[u
argmax

最后一个有效索引

选择3
选择4
备选案文5 这太傻了

df[np.logical_or.accumulate(df.first_name.eq('Alex')[::-1])[::-1]]
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
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
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
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]]