【发布时间】:2014-07-14 15:27:51
【问题描述】:
我有一个数据框,其中每一列都包含 ID 号;看起来像这样:
LC3B.low LC3B.hi P62.low P62.hi
PT 65 PT 172 PT 86 PT 135
PT 86 PT 65 PT 38 PT 56
PT 251 PT 251 PT 217 PT 261
我想列出出现在两列或多列中的 ID。因此,对于提供的值,pandas 将表明:
- LC3B.low 和 LC3B.hi 共享“PT 65”和“PT 251”
- LC3B.low 和 P62.low 共享“PT 86”
我是 Pandas 的新手,并且习惯于 Perl。在 Perl 中,我会通过创建数组和每列的哈希值来解决这个问题,然后根据每个哈希值检查每个数组的每个元素,并使用伴随每次比较和每个匹配项的打印语句,所以我的输出看起来像这样:
LC3B.low vs LC3B.hi
PT 65
PT 251
LC3B.low vs P62.low
PT 86
LC3B.low vs P62.hi
LC3B.hi vs P62.low
LC3B.hi vs P62.hi
P62.low vs P62.hi
但这会产生混乱的输出,并且感觉它不是解决问题的最有效方法。 Pandas 肯定有一种内置的方式来做这种事情吗?
更新:我一直在尝试学习使用 SQL 命令来完成这项任务,但 pandasql 无法识别我的列名。所以基本上:
print pysqldf("SELECT * FROM df;")
打印表格但是,
print pysqldf("SELECT ATG12.low FROM df;")
打印“无”
我绝对不会致力于在 Pandas 中使用 SQL 来解决这个问题。将不胜感激有关如何列出在多列中显示的所有 ID 值的任何和所有建议或建议
【问题讨论】:
-
您是否需要知道他们共享的列,或者只是他们出现在 2 个或更多列中?
-
我需要知道他们共享的列
-
我认为点
.在SQL中有特殊的含义——它分隔了数据库名、表名和列名。 -
我尝试将列重命名为只有字母,但仍然遇到相同的 SQL 问题。
标签: python sql perl pandas dataframe