python - 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)]}
谢谢 !
解决方案
您可以通过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)]}
即使您有两个以上的列,这也将起作用。实际上,它所做的是,对于每一列,获取满足以下两个条件的索引值对:
- 该列中该索引的值大于 0
- 该列中所有其他索引的值为 0
如果您假设没有所有值都非零的行,那么您可以删除第一个条件,它给出:
{col: list(df.loc[(df.drop(columns=col) == 0).all(axis=1), col].iteritems())
for col in df.columns}
推荐阅读
- laravel - 每个用户如何属于一个组织,使用 Laravel Nova 拥有私有数据?
- javascript - 使 switch 语句优雅
- c# - EF Core 无法为表中的标识列插入显式值
- linux - 将 awk 输出传递到对话框清单
- c# - Asp.Net 核心实现工厂未注册服务
- python - 安装 twilio 时出错,因为它不在 AWS 库中
- linux - 使用 grep 计算目录中包含字符串的所有行
- javascript - 是否可以使用当前在 node.js 中打开的文件填充文件对话框?
- servlets - 当 servlet 被销毁时,HSQLDB Timer Thread 仍在运行
- javascript - Firestore 查询文档输出“未定义”,片刻后显示存储在 Node.js 中 Firestore 中的正确数据