首页 > 解决方案 > Pandas:如何在数据框中选择与条件匹配的索引/行标签

问题描述

我有一个看起来像这样的数据框

        fail    success
aa      1       0
ab      1       0
aback   0       1
abandon 3       1
abate   0       1
abc     1       0

其中“fail”和“success”是列的名称,“aa”、“ab”、“aback”等是行的标签。该表包含单词(“ab”、“aback”等)在一组文本(2 组:“fail”和“success”)中出现的次数。

有没有办法根据单词在其中一个组中是否唯一将每个行标签与列名相关联?

输出应如下所示:

{'fail' : [("aa",1),("ab",1),("abc",1)], 'success' : [("aback",1),("abate",1)]}

谢谢 !

标签: pythonpandasdataframe

解决方案


您可以通过dict理解来做到这一点:

{col: list(df.loc[(df[col] > 0) & (df.drop(columns=col) == 0).all(axis=1), col].iteritems())
 for col in df.columns}

输出:

{'fail': [('aa', 1), ('ab', 1), ('abc', 1)],
 'success': [('aback', 1), ('abate', 1)]}

即使您有两个以上的列,这也将起作用。实际上,它所做的是,对于每一列,获取满足以下两个条件的索引值对:

  1. 该列中该索引的值大于 0
  2. 该列中所有其他索引的值为 0

如果您假设没有所有值都非零的行,那么您可以删除第一个条件,它给出:

{col: list(df.loc[(df.drop(columns=col) == 0).all(axis=1), col].iteritems())
 for col in df.columns}

推荐阅读