删除数据框中不全为 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])]
我需要保留数据框中所有行值为 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])]