Python 由不同数据帧的唯一值组成的新数据帧

Python 由不同数据帧的唯一值组成的新数据帧,python,pandas,numpy,Python,Pandas,Numpy,我有两个数据帧: df1 = a b 1 555 2 555 4 555 4 555 5 555 6 555 7 555 8 555 15 555 1 555 及 我想在两个数据框之间找到列a的相同值,并将它们放入新的数据框中(也包括其他列的值。这里是b) 期望输出为: df3 = a b 2 555 2 666 2 666 4 555 4 555 4 666

我有两个数据帧:

df1 = 
a   b
1   555
2   555
4   555
4   555
5   555
6   555
7   555
8   555
15  555
1   555

我想在两个数据框之间找到列
a
的相同值,并将它们放入新的数据框中(也包括其他列的值。这里是
b
) 期望输出为:

df3 = 
    a   b
    2   555
    2   666
    2   666
    4   555
    4   555
    4   666
    …
等等

我试过:

df3= pd.merge(df1, df2, on=['a'], how='inner')

但它给了我一些不同的东西大致上,这将解决您的问题:

(pd.concat((df1[df1.a.isin(df2.a)],
            df2[df2.a.isin(df1.a)]),
           ignore_index=True)
    .sort_values('a'))

#   a    b
#0  2  555
#4  2  666
#5  2  666
#8  2  666
#1  4  555
#2  4  555
#6  4  666
#3  5  555
#7  5  666
使用:

或:



这与其他解决方案没有太大区别

set1=set(df1[“a”].tolist())
set2=set(df2[“a”].tolist())
inter=列表(集合1.交叉点(集合2))
df3=pd.concat([df1[df1[“a”].isin(内部)],
df2[df2[“a”].isin(内部)],
忽略(索引=真)

你说“唯一值”是什么意思?这个问题对我来说不是100%清楚。是否希望
df3
仅包含列
a
中的值同时位于排序交叉点
df1
df2
中的行?
(pd.concat((df1[df1.a.isin(df2.a)],
            df2[df2.a.isin(df1.a)]),
           ignore_index=True)
    .sort_values('a'))

#   a    b
#0  2  555
#4  2  666
#5  2  666
#8  2  666
#1  4  555
#2  4  555
#6  4  666
#3  5  555
#7  5  666
df3= pd.concat([df1, df2], ignore_index=True)
df3 = df3[df3['a'].isin(np.intersect1d(df1['a'], df2['a']))]
idx = np.intersect1d(df1['a'], df2['a'])
df3 = pd.concat([df1[df1.a.isin(idx)], df2[df2.a.isin(idx)]], ignore_index=True)
print (df3)
   a    b
1  2  555
2  4  555
3  4  555
4  5  555
0  2  666
1  2  666
3  4  666
4  5  666
5  2  666