Python 合并创建不需要的重复条目

Python 合并创建不需要的重复条目,python,pandas,merge,Python,Pandas,Merge,我是Pandas的新手,我想合并两个具有相似列的数据集。除了许多相同的值之外,与其他列相比,每个列都有一些唯一的值。我想保留每一列中的一些副本。我想要的输出如下所示。添加“内部”或“外部”的方式不会产生所需的结果 import pandas as pd df1 = df2 = pd.DataFrame({'A': [2,2,3,4,5]}) print(pd.merge(df1,df2)) output: A 0 2 1 2 2 2 3 2 4 3 5 4 6 5 d

我是Pandas的新手,我想合并两个具有相似列的数据集。除了许多相同的值之外,与其他列相比,每个列都有一些唯一的值。我想保留每一列中的一些副本。我想要的输出如下所示。添加“内部”或“外部”的方式不会产生所需的结果

import pandas as pd

df1 = df2 = pd.DataFrame({'A': [2,2,3,4,5]})

print(pd.merge(df1,df2))

output:
   A
0  2
1  2
2  2
3  2
4  3
5  4
6  5

desired/expected output:
   A
0  2
1  2
2  3
3  4
4  5
请让我知道如何/如果我可以实现所需的输出使用合并,谢谢

编辑 为了澄清为什么我对这种行为感到困惑,如果我简单地添加另一列,它不会有四个2,而是只有两个2,因此我希望在我的第一个示例中,它也会有两个2。为什么行为会改变,熊猫在做什么

import pandas as pd
df1 = df2 = pd.DataFrame(
    {'A': [2,2,3,4,5], 'B': ['red','orange','yellow','green','blue']}
)

print(pd.merge(df1,df2))

output:
   A       B
0  2     red
1  2  orange
2  3  yellow
3  4   green
4  5    blue

However, based on the first example I would expect:
   A       B
0  2     red
1  2  orange
2  2     red
3  2  orange
4  3  yellow
5  4   green
6  5    blue

你试过df.drop_duplicates()吗

似乎它给出了你想要的结果

dict1 = {'A':[2,2,3,4,5]}
dict2 = {'A':[2,2,3,4,5]}

df1 = pd.DataFrame(dict1)
df1['index'] = [i for i in range(len(df1))]
df2 = pd.DataFrame(dict2)
df2['index'] = [i for i in range(len(df2))]

df1.merge(df2).drop('index', 1, inplace = True)
其思想是基于匹配的索引以及匹配的“A”列值进行合并。
以前,由于合并的工作方式取决于匹配,因此发生的情况是,df1中的前2与df2中的第一个和第二个2都匹配,df1中的第二个2也与df2中的第一个和第二个2都匹配

如果你试试这个,你就会明白我在说什么

dict1 = {'A':[2,2,3,4,5]}
dict2 = {'A':[2,2,3,4,5]}

df1 = pd.DataFrame(dict1)
df1['index'] = [i for i in range(len(df1))]
df2 = pd.DataFrame(dict2)
df2['index'] = [i for i in range(len(df2))]

df1.merge(df2, on = 'A')
输出:

   A
0  2
1  2
2  3
3  4
4  5

不幸的是,我偶然发现了一个类似的问题,我认为这个问题已经过时了。 我以不同的方式使用这个函数来解决这个问题,将它应用到两个原始表中,即使这些表中没有重复的表。这是一个例子(很抱歉,我不是专业程序员):


请您添加一个不那么模棱两可的示例,比如使用一些不同的数据点,好吗?我以前遇到过确切的问题。当您试图合并的列中存在重复项时,就会出现这种情况。我提供的答案将帮助您使用临时索引来绕过它。你会得到想要的结果,但这不一定是最有效的方法。@Mitch我编辑这篇文章是为了澄清我的困惑。我不认为
merge
实际上是你想要使用的,但问题还是有点不清楚。如果
df1
df2
具有不同的值,您期望得到什么?还是它们总是一样的?您想对哪些列执行“合并”操作?我知道您还没有代表发表评论,但这不是答案。请原谅我的错误guy@AsheKetchum“仁慈”投票可能并不健康。这不是答案。这是真的:)
删除重复项不会产生所需的结果。所需的结果中有两个2的实例,而
drop_duplicates
将只产生一个2的实例。您能对倒数第二行的作用添加一些注释吗?您能更详细地解释一下您的问题吗?
import pandas as pd

dict1 = {'A':[2,2,3,4,5]}
dict2 = {'A':[2,2,3,4,5]}

df1 = pd.DataFrame(dict1).reset_index()
df2 = pd.DataFrame(dict2).reset_index()

df = df1.merge(df2, on = 'A')
df = pd.DataFrame(df[df.index_x==df.index_y]['A'], columns=['A']).reset_index(drop=True)

print(df)
   A
0  2
1  2
2  3
3  4
4  5
import pandas as pd

dict1 = {'A':[2,2,3,4,5]}
dict2 = {'A':[2,2,3,4,5]}

df1 = pd.DataFrame(dict1)
df1=df1.drop_duplicates()

df2 = pd.DataFrame(dict2)
df2=df2.drop_duplicates()

df=pd.merge(df1,df2)
print('df1:')
print( df1 )

print('df2:')
print( df2 )

print('df:')
print( df )