如果行在Pandas中包含特定值,则删除列

时间:2019-06-25 13:07:02

标签: python pandas dataframe

我开始学习熊猫。我在SO中看到了很多问题,人们问如果列匹配特定值,如何删除行。

在我看来,情况恰恰相反。想象一下,拥有这个数据框:

Dataframe

您想知道的是,如果任何列的任何行中的值均为salty,则应删除该列,其结果是:

Dataframe 2

我尝试了与此类似的地方:

if df.loc[df['A'] == 'salty']:
   df.drop(df.columns[0], axis=1, inplace=True)

但是我很迷失在寻找有关如何基于该列的行值删除列的文档。该代码混合了查找特定列并始终删除第一列的过程(因为我的想法是在for循环的所有列中搜索该列中的行的值。

3 个答案:

答案 0 :(得分:2)

对您的值进行比较,然后使用DataFrame.any获取要索引的掩码:

df.loc[:, ~(df == 'Salty').any()]

如果您坚持使用drop,这就是您需要这样做的方式。传递索引列表:

df.drop(columns=df.columns[(df == 'Salty').any()])

df = pd.DataFrame({
    'A': ['Mountain', 'Salty'], 'B': ['Lake', 'Hotty'], 'C': ['River', 'Coldy']})
df
          A      B      C
0  Mountain   Lake  River
1     Salty  Hotty  Coldy

(df == 'Salty').any()
A     True
B    False
C    False
dtype: bool

df.loc[:, ~(df == 'Salty').any()]
       B      C
0   Lake  River
1  Hotty  Coldy

df.columns[(df == 'Salty').any()]
# Index(['A'], dtype='object')

df.drop(columns=df.columns[(df == 'Salty').any()])
       B      C
0   Lake  River
1  Hotty  Coldy

答案 1 :(得分:2)

这是一种可能性:

df = df.drop([col for col in df.columns if df[col].eq('Salty').any()], axis=1)

答案 2 :(得分:0)

以下内容是在所需列与特定值匹配的位置找到索引,然后将其删除。我认为这可能是实现此目的的更直接方法:

df.drop(df.loc[df['Your column name here'] == 'Match value'].index, inplace=True)

相关问题