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

新手上路,请多包涵

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

就我而言,情况恰恰相反。想象一下有这个数据框:

数据框

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

数据框 2

我尝试过与此有几个相似之处:

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

但是我很迷茫,找不到关于如何根据该列的行值删除列的文档。该代码是查找特定列和始终删除第一列的混合(因为我的想法是在 for 循环中的所有列中搜索该列中一行的值。

原文由 M.K 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 629
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

原文由 cs95 发布,翻译遵循 CC BY-SA 4.0 许可协议

以下是定位所需列与特定值匹配的索引,然后删除它们。我认为这可能是实现此目的的更直接的方法:

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

原文由 grumpyTofu 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题