Python 熊猫:在集合列上合并。计数器(甚至只是dict)对象?

Python 熊猫:在集合列上合并。计数器(甚至只是dict)对象?,python,pandas,merge,Python,Pandas,Merge,我需要使用collections.Counter对象的列来执行两个数据帧的合并。合并引发了一个奇怪的错误。请参阅下面的可执行代码示例 import pandas as pd from collections import Counter a = pd.DataFrame([(120000.0, 120000.0, 0.0, 120000.0), (120000.0, 280000.0, 120000.0, 120000.0), (280000.0, 280000.0, 120000.0, 2

我需要使用collections.Counter对象的列来执行两个数据帧的合并。合并引发了一个奇怪的错误。请参阅下面的可执行代码示例

import pandas as pd
from collections import Counter
a = pd.DataFrame([(120000.0, 120000.0, 0.0, 120000.0),
 (120000.0, 280000.0, 120000.0, 120000.0),
 (280000.0, 280000.0, 120000.0, 280000.0),
 (280000.0, 420000.0, 280000.0, 280000.0),
 (420000.0, 420000.0, 280000.0, 420000.0),
 (420000.0, 500000.0, 420000.0, 420000.0),
 (500000.0, 580000.0, 420000.0, 500000.0),
 (580000.0, 820000.0, 500000.0, 580000.0),
 (820000.0, 860000.0, 580000.0, 820000.0),
 (860000.0, 1160000.0, 820000.0, 860000.0),
 (1160000.0, 1160000.0, 860000.0, 1160000.0)])
b = pd.DataFrame([(120000.0, 120000.0, 0.0, 120000.0),
 (120000.0, 280000.0, 120000.0, 120000.0),
 (280000.0, 280000.0, 120000.0, 280000.0),
 (280000.0, 440000.0, 280000.0, 280000.0),
 (440000.0, 440000.0, 280000.0, 440000.0),
 (440000.0, 520000.0, 440000.0, 440000.0),
 (520000.0, 580000.0, 440000.0, 520000.0),
 (580000.0, 820000.0, 520000.0, 580000.0),
 (820000.0, 860000.0, 580000.0, 820000.0),
 (860000.0, 1120000.0, 820000.0, 860000.0),
 (1120000.0, 1160000.0, 860000.0, 1120000.0)])
a['ID'] = [Counter(i) for i in list(a.values)]
b['ID'] = [Counter(i) for i in list(b.values)]
pd.merge(a, b, on='ID')
这将返回:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 601, in runfile
    execfile(filename, namespace)
  File "/usr/local/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 73, in execfile
    builtins.execfile(filename, *where)
  File "/home/ilya/tmp/tmp_merge.py", line 33, in <module>
    pd.merge(a, b, on='ID')
  File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 38, in merge
    return op.get_result()
  File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 186, in get_result
    join_index, left_indexer, right_indexer = self._get_join_info()
  File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 273, in _get_join_info
    sort=self.sort, how=self.how)
  File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 461, in _get_join_indexers
    llab, rlab, shape = map(list, zip( * map(fkeys, left_keys, right_keys)))
TypeError: type object argument after * must be a sequence, not itertools.imap
,但没用。这是正常的行为吗?如果是,如何避免此错误?或者有没有其他方法可以达到同样的最终结果

我使用Python2.7和pandas 0.16.1,通常使用ipython笔记本,但这也只是在python中测试的

编辑: 澄清这一切的目的。
我需要根据两对列的值进行合并。在实际数据中,它们是Start1、End1、Start2、End2。End2>Start2,End1>Start1。这个例子是我的真实值的一个子集。问题是,在两个数据集中,可能存在这样的情况:Start1_1,End1_1==Start2_2,End2_2和Start1_2,End1_2==Start2_1,End2_1;我希望这些行也被合并,第二个数字表示数据集。我认为使用这样的计数器应该是最简单的解决方案,而且我很确定这种方法不会出现误报。

解决这个问题的一种方法是为原始数据结构转换为哈希类型的版本的每个数据帧创建一列

例如:

然后

pd.merge(a, b, on='IDHash')

之后,只需删除列。

解决此问题的一种方法是为原始数据结构转换为哈希类型的版本的每个数据帧创建一列

例如:

然后

pd.merge(a, b, on='IDHash')

之后,只需擦除列。

您确定尝试哈希dict时没有出错吗?可能,我不知道…您实际上想做什么?请查看编辑。您确定尝试哈希dict时没有出错吗?可能,我不知道…您实际上想做什么?请查看编辑。
pd.merge(a, b, on='IDHash')