如何根据多个值的总和删除 Pandas 中的行?

use*_*732 4 python dataframe pandas

我建立了一个 df:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(1,6,size=(10, 6)),
              columns=list('ABCDEF'))
df = df.applymap(lambda x: 'Sp'+str(x))
print(df)
Run Code Online (Sandbox Code Playgroud)

给出类似的东西:

     A    B    C    D    E    F
0  Sp4  Sp5  Sp4  Sp4  Sp4  Sp3
1  Sp2  Sp3  Sp5  Sp2  Sp2  Sp3
2  Sp2  Sp3  Sp2  Sp4  Sp5  Sp5
3  Sp5  Sp3  Sp1  Sp4  Sp4  Sp3
4  Sp3  Sp1  Sp1  Sp5  Sp4  Sp1
5  Sp1  Sp4  Sp4  Sp5  Sp4  Sp4
6  Sp2  Sp1  Sp3  Sp4  Sp5  Sp3
7  Sp3  Sp3  Sp2  Sp1  Sp4  Sp4
8  Sp1  Sp1  Sp1  Sp4  Sp2  Sp3
9  Sp5  Sp5  Sp3  Sp4  Sp1  Sp3
Run Code Online (Sandbox Code Playgroud)

如何删除所有行(例如)Sp2 和 Sp3 的总和大于 2(即它们的任何组合连续出现两次以上)?

我一直在尝试使用 pandas.DataFrame.eq

喜欢:df[~df.eq('Sp2').sum(1).gt(2)]但这只会删除 Sp2 > 2 的行。

但我不知道如何合并逻辑 OR 以使其类似于 dat[~dat.eq('Sp2' or 'Sp3').sum(1).gt(2)]

Chr*_*ris 5

使用pandas.DataFrame.isin

new_df = df[df.isin(['Sp2', 'Sp3']).sum(1).le(2)]
print(new_df)
Run Code Online (Sandbox Code Playgroud)

输出:

     A    B    C    D    E    F
0  Sp4  Sp5  Sp4  Sp4  Sp4  Sp3
3  Sp5  Sp3  Sp1  Sp4  Sp4  Sp3
4  Sp3  Sp1  Sp1  Sp5  Sp4  Sp1
5  Sp1  Sp4  Sp4  Sp5  Sp4  Sp4
8  Sp1  Sp1  Sp1  Sp4  Sp2  Sp3
9  Sp5  Sp5  Sp3  Sp4  Sp1  Sp3
Run Code Online (Sandbox Code Playgroud)