python:如果条件满足,则删除df列

python:如果条件满足,则删除df列,python,pandas,dataframe,Python,Pandas,Dataframe,如果列中的所有值都是“0%”,我想从数据帧中删除给定的列 我的df: data = {'UK': ['11%', '16%', '7%', '52%', '2%', '5%', '3%', '3%'], 'US': ['0%', '0%', '0%', '0%', '0%', '0%', '0%', '0%'], 'DE': ['11%', '16%', '7%', '52%', '2%', '5%', '3%', '3%'], 'FR': ['1

如果列中的所有值都是“0%”,我想从数据帧中删除给定的列

我的df:

data = {'UK': ['11%', '16%', '7%', '52%', '2%', '5%', '3%', '3%'],
        'US': ['0%', '0%', '0%', '0%', '0%', '0%', '0%', '0%'],
        'DE': ['11%', '16%', '7%', '52%', '2%', '5%', '3%', '3%'],
        'FR': ['11%', '16%', '7%', '52%', '2%', '5%', '3%', '3%']
        }
dummy_df = pd.DataFrame(data, 
                        index=    ['cat1','cat2','cat3','cat4','cat5','cat6','cat7','cat8'], 
                        columns=['UK', 'US', 'DE', 'FR'])
到目前为止,我的代码是:

dummy_df.drop(dummy_df == '0%',inplace=True)
我得到一个值错误:

ValueError: labels ['UK' 'US' 'DE' 'FR'] not contained in axis
说明:

与您已经获得的“0%”进行比较,这将给出以下数据帧:

In [182]: dummy_df == '0%'
Out[182]:
         UK    US     DE     FR
cat1  False  True  False  False
cat2  False  True  False  False
cat3  False  True  False  False
cat4  False  True  False  False
cat5  False  True  False  False
cat6  False  True  False  False
cat7  False  True  False  False
cat8  False  True  False  False
现在我们想知道哪些列具有所有
True
s:

In [183]: (dummy_df == '0%').all()
Out[183]:
UK    False
US     True
DE    False
FR    False
dtype: bool
最后,我们可以使用这些布尔值进行索引(但如果不想选择这是
True
,则使用
~
作为相反的值):
dummy_df.loc[:,~(dummy_df='0%')。all()


类似地,您也可以这样做:
dummy_-df.loc[:,(dummy_-df!=“0%”)。any()
(选择至少一个值不等于“0%”的列)

首先获取所有值
!=“0%”的列0%'

In [163]: cols = (dummy_df != '0%').any()

In [164]: cols
Out[164]:
UK     True
US    False
DE     True
FR     True
dtype: bool
然后只调用
cols
列,这些列是
True

In [165]: dummy_df[cols[cols].index]
Out[165]:
       UK   DE   FR
cat1  11%  11%  11%
cat2  16%  16%  16%
cat3   7%   7%   7%
cat4  52%  52%  52%
cat5   2%   2%   2%
cat6   5%   5%   5%
cat7   3%   3%   3%
cat8   3%   3%   3%

相关问题
all
不应该是
any
(参见我的答案),因为OP想要删除所有值都为0%的列(因此应该包括任何值不为0%的列),非常感谢,这就是我要找的。
In [165]: dummy_df[cols[cols].index]
Out[165]:
       UK   DE   FR
cat1  11%  11%  11%
cat2  16%  16%  16%
cat3   7%   7%   7%
cat4  52%  52%  52%
cat5   2%   2%   2%
cat6   5%   5%   5%
cat7   3%   3%   3%
cat8   3%   3%   3%