删除数据框中不全为 1 或全为 0 的行

remove rows in dataframe which are not all 1 or all 0

我需要保留数据框中所有行值为 0 或全为 1 的行。

a = np.repeat(0,10)
b = np.repeat(1,10)
ab = pd.DataFrame({'col1':a,'col2':b}).transpose()

一个选项,获取差异并确保结果始终为 0:

import numpy as np
np.all(np.diff(ab.values, 1)==0, 1)

输出:

array([ True,  True])

然后用这个切片:

ab[np.all(np.diff(ab.values, 1)==0, 1)]

其他选项,使用nunique:

ab[ab.nunique(1).eq(1)]

可能的解决方案如下:

# pip install pandas

import pandas as pd

# create test dataframe
df = pd.DataFrame({'col1':[0,0,0,0],'col2':[1,1,1,1],'col3':[0,1,0,1],'col4':['a','b',0,1],'col5':['a','a','a','a']}).transpose()
df

# filter rows of dataframe
df = df[df.eq(0).all(axis=1) | df.eq(1).all(axis=1)]
df

Returns

我目前正在使用它,因为我猜它也可以工作..

    Df= Df[(Df.sum(axis=1)==0) | (Df.sum(axis=1)==Df.shape[1])]