有条件地删除 Pandas Dataframe 行

Gus*_*sen 5 python dataframe python-3.x pandas

我希望删除之前和之后的行对 column 具有相同值的行num2。我的数据框如下所示:

import pandas as pd

df = pd.DataFrame([
    [12, 10],
    [11, 10],
    [13, 10],
    [42, 11],
    [4, 11],
    [5, 2]
], columns=["num1", "num2"]
)
Run Code Online (Sandbox Code Playgroud)

这是我的目标:

df = pd.DataFrame([
    [12, 10],
    [13, 10],
    [42, 11],
    [4, 11],
    [5, 2]
], columns=["num1", "num2"]
)
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

df["num1_diff"] = df["num2"].diff().fillna(0).astype(int)
filt = df["num1_diff"].apply(lambda x: x == 0)
print(df[filt])
Run Code Online (Sandbox Code Playgroud)

给予:

   num1  num2  num1_diff
0    12    10          0
1    11    10          0
2    13    10          0
4     4    11          0
Run Code Online (Sandbox Code Playgroud)

我正在考虑使用新num1_diff列进行过滤。这是一种好方法,还是可能有更好的方法?

Erf*_*fan 6

使用Series.shift两次,并检查其中num2等于:

df[df['num2'].shift().ne(df['num2'].shift(-1))]

   num1  num2
0    12    10
2    13    10
3    42    11
4     4    11
5     5     2
Run Code Online (Sandbox Code Playgroud)