问题描述
我正在尝试删除yes
列中有'Ammend'
的行之后的所有行
df:
Ammend
0 no
1 yes
2 no
3 no
4 yes
5 no
必需的输出df:
Ammend
0 no
1 yes
3 no
4 yes
看下面的代码:
df = df.drop(df[df['Amended' == 'yes']],inplace=True)
返回一条KeyError: False
错误消息
我尝试使用.index.tolist()
和.loc
之类的不同方法对此进行了许多不同的变化
但我似乎还是无法弄清楚。
我也尝试过截断:
filings_df.truncate(after=filings_df.loc[filings_df['Filings'] == '10-K/A'].index[0],before = filings_df.loc[filings_df['Filings'] == '10-K/A'].index[1])
这将返回:
IndexError:索引1超出了大小为1的轴0的边界
解决方法
尝试一下
import pandas as pd
import numpy as np
np.random.seed(525)
df = pd.DataFrame({'Other': np.random.rand(10),'Ammend': np.random.choice(['yes','no'],10)})
df
Other Ammend
0 0.750282 no
1 0.379455 no
2 0.766467 yes
3 0.351025 no
4 0.965993 no
5 0.709159 no
6 0.838831 yes
7 0.218321 no
8 0.573360 yes
9 0.738974 no
输出:
df.drop(index=df[df['Ammend'].shift() == 'yes'].index)
Other Ammend
0 0.750282 no
1 0.379455 no
2 0.766467 yes
4 0.965993 no
5 0.709159 no
6 0.838831 yes
8 0.573360 yes
,
结合使用pandas.Series.ne
和shift
技巧的一种方法:
s = df["Ammend"]
new_df = df[~s.ne(s.shift()).cumsum().duplicated(keep="first")]
print(new_df)
输出:
Ammend
0 no
1 yes
2 no
4 yes
5 no