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)]
使用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)
归档时间: |
|
查看次数: |
79 次 |
最近记录: |