如果此列中的所有值都是特定值,则从数据框中删除该列

时间:2019-09-02 17:45:39

标签: pandas dataframe

数据样本:

choice   col1  col2  col3
1    100   110   100
2    110   110   100
5    110   110   100
...
50   100   200   300

应成为:

choice   col1  col2
1    100   110
2    110   110
5    110   110
...
50   100   200

如果该列的所有除第50行以外的值均为100,则尝试删除第3列。

试图使用:

df['col3'].all() == 100
or
df['col3'].any() == 100

这两行既没有给出结果,也没有产生错误

2 个答案:

答案 0 :(得分:2)

使用df.all()返回True/False是否满足条件df.eq(),并将True反转为False,反之亦然,使用反转~,反之亦然。在df.loc[]的帮助下过滤True列:

df.loc[:,~df.eq(100).all()]

  id  col1  col2
   1   100   110
   2   110   110
   3   110   110

编辑:每次编辑时,您都可以尝试使用类似逻辑的自定义功能:

def myfunc(x,choice):
    x=x.set_index('choice')
    cond=x.loc[:,'col3'].drop(choice).eq(100).all()
    if cond:
        return x.drop('col3',1).reset_index()
    else:
        return x.reset_index()
myfunc(df,'50') #if choice column is an integer myfunc(df,50)

  choice   col1   col2
0      1  100.0  110.0
1      2  110.0  110.0
2      5  110.0  110.0
3     50  100.0  200.0

答案 1 :(得分:1)

您也可以这样做:

df=df.T[~df.eq(100).all()].T

输出:

  id  col1  col2
   1   100   110
   2   110   110
   3   110   110