熊猫:如何在符合条件的数据框中选择索引/行标签

时间:2019-05-11 01:01:17

标签: python pandas dataframe

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

addClickListener(e) {
    var self = this;
    e.addEventListener('click', function() {
        self.moveCharTo(e);
    }, false);
}

removeClickListener(e) {
    var self = this;
    e.removeEventListener('click', function(){
        self.moveCharTo(e);
    }, false);
}

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

有没有一种方法可以根据单词在一组中的唯一性将每个行标签与列名相关联?

输出应如下所示:

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

谢谢!

4 个答案:

答案 0 :(得分:3)

您可以通过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}

答案 1 :(得分:0)

让我们先完成“成功”的一半:

df.success[df.fail==0]

这将为您提供失败为零的成功值:

aback    1
abate    1

如果您确实需要一个列表列表,请执行以下操作:

df.success[df.fail==0].reset_index().values.tolist()

现在您拥有:

[['aback', 1], ['abate', 1]]

或者,对于示例输出中的元组列表:

s = df.success[df.fail==0]
list(zip(s.index, s))

将成功与失败交换为结果的另一半,就可以了。

答案 2 :(得分:0)

使用熊猫nuniquestack,然后groupby通过dict得到to_dict

df[df.ne(0).nunique(1).ne(1)].\
    replace(0,np.nan).\
      stack().\
          reset_index(0).apply(tuple,1).\
              groupby(level=0).apply(list).to_dict()
Out[497]: 
{'fail': [('aa', 1.0), ('ab', 1.0), ('abc', 1.0)],
 'success': [('aback', 1.0), ('abate', 1.0)]}

答案 3 :(得分:0)

您可以使用:

new_dict = {}
new_dict['fail'] = df[((df['fail']==1)&(df['success']==0))]['fail'].reset_index().values.tolist()
new_dict['success'] = df[((df['fail']==0)&(df['success']==1))]['success'].reset_index().values.tolist()

输出:

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