在python中获取两个数据帧之间的匹配
编辑:意识到我可能已经问了一个非常类似的问题,测试这个解决方案是否有效 是否有一种方法可以从两个数据帧中获取匹配项,而无需使用在python中获取两个数据帧之间的匹配,python,python-2.7,pandas,Python,Python 2.7,Pandas,编辑:意识到我可能已经问了一个非常类似的问题,测试这个解决方案是否有效 是否有一种方法可以从两个数据帧中获取匹配项,而无需使用pandas.merge 我一直在使用:pd.merge(dfa,dfb,on=('A','B','C'),how='right'),但它并没有按照我的预期工作 我有两个数据帧,一个是这样的: A B C w 1 1 b 1 2 c 3 1 c 3 1 第二个看起来像 A B
pandas.merge
我一直在使用:pd.merge(dfa,dfb,on=('A','B','C'),how='right')
,但它并没有按照我的预期工作
我有两个数据帧,一个是这样的:
A B C
w 1 1
b 1 2
c 3 1
c 3 1
第二个看起来像
A B C D
w 1 1 1/1/14
b 1 2 1/3/14
c 3 1 1/7/14
c 3 1 1/7/14
d 4 7 1/7/14
z 5 3 1/8/14
第一个数据帧已通过使用pandasql
的查询运行,并且由于某种原因pandasql
无法处理日期,即使这些日期没有在查询中使用(我得到错误绑定参数1-可能是不支持的类型。
,即使没有使用)
我最终想要的是
A B C D
w 1 1 1/1/14
b 1 2 1/3/14
c 3 1 1/7/14
c 3 1 1/7/14
但是当我使用pandas.merge时,我最终得到了
A B C D
w 1 1 1/1/14
b 1 2 1/3/14
c 3 1 1/7/14
c 3 1 1/7/14
c 3 1 1/7/14
c 3 1 1/8/14
无论我是使用“内部”、“右侧”还是“左侧”表示“如何”
我希望我能够使用pandasql
并通过某种日期解析选项跳过所有这些,但我似乎找不到任何选项
那么,有没有另一种方法不是熊猫。合并或循环遍历数据帧的所有列/行?如果您的数据帧已经匹配,那么
concat
和内部
选项会为您处理这个问题吗
In [46]:
print pd.concat((df1, df2), join='inner', axis=1)[[0,1,2,-1]]
A B C D
0 w 1 1 1/1/14
1 b 1 2 1/3/14
2 c 3 1 1/7/14
3 c 3 1 1/7/14
[[0,1,2,-1]
是为了避免重复A
、B
和C
列
无论如何,这可能是一个更好、更普遍的解决方案:
In [90]:
print pd.merge(df1.drop_duplicates(subset=['A', 'B', 'C']),
df2, on=['A','B','C'])
A B C D
0 w 1 1 1/1/14
1 b 1 2 1/3/14
2 c 3 1 1/7/14
3 c 3 1 1/7/14
有时候。当df1只有一行时不起作用,但除此之外似乎还起作用。我们将用更多的数据进行测试,但似乎是答案。谢谢事实上,我正要删除它,因为除非
A
、B
、C
已经匹配,否则它将无法工作。但我们稍后再来讨论。我真的怀疑问题是由于重复的行。到目前为止,它实际上对我有效。我其他尝试的问题都是重复的,每次匹配两次,结果是4次而不是2次。我只是用更一般的解决方案编辑了答案<代码>删除重复的一次df
将绕过它。