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

2024-05-13 19:38:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有字符串列的数据帧,我想在最后一次出现名称后删除所有行。你知道吗

first_name
Andy
Josh
Mark
Tim
Alex
Andy
Josh
Mark
Tim
Alex
Andy
Josh
Mark

我想要的是在亚历克斯最后一次出现之后删除行,所以删除安迪、乔希和马克的行。你知道吗

我想在第一次出现之前用:df=df[(df.first_name== 'Alex').idxmax():]删除,但不知道如何删除最后一行。你知道吗

谢谢!你知道吗


Tags: 数据字符串name名称dffirstmarkandy
2条回答

maskbfill

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

cumsumidxmax

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

cumsummax

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

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()]

选项3

df.loc[:df.first_name.eq('Alex')[::-1].idxmax()]

选项4

df.iloc[:np.flatnonzero(df.first_name.eq('Alex')).max() + 1]

选项5

这太傻了!你知道吗

df[np.logical_or.accumulate(df.first_name.eq('Alex')[::-1])[::-1]]

相关问题 更多 >