删除包含特定值的行之后的 pandas DataFrame 行
Drop a pandas DataFrame row that comes after a row that contains a particular value
我正在尝试删除 'Ammend'
列 yes
之后的所有行
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)
Returns 一个 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])
这个returns:
IndexError: index 1 is out of bounds for axis 0 with size 1
试试这个
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
我正在尝试删除 'Ammend'
列 yes
之后的所有行
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)
Returns 一个 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])
这个returns:
IndexError: index 1 is out of bounds for axis 0 with size 1
试试这个
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