![](/img/trans.png)
[英]Pandas: merge dataframes without creating new columns inside a for operation
[英]Pandas: merge dataframes without creating new columns
我有两个相同列的数据帧:
df1 = pd.DataFrame([['Abe','1','True'],['Ben','2','True'],['Charlie','3','True']], columns=['Name','Number','Other'])
df2 = pd.DataFrame([['Derek','4','False'],['Ben','5','False'],['Erik','6','False']], columns=['Name','Number','Other'])
给出:
Name Number Other
0 Abe 1 True
1 Ben 2 True
2 Charlie 3 True
和
Name Number Other
0 Derek 4 False
1 Ben 5 False
2 Erik 6 False
我想要一个输出数据帧,它是基于“名称”的两者的交集:
output_df =
Name Number Other
0 Ben 2 True
1 Ben 5 False
我尝试过基本的pandas合并,但返回是不可取的:
pd.merge(df1,df2,how='inner',on='Name') =
Name Number_x Other_x Number_y Other_y
0 Ben 2 True 5 False
这些数据帧非常大,所以我更喜欢使用一些熊猫魔法来保持快速。
您可以使用concat
,然后通过过滤isin
与numpy.intersect1d
使用boolean indexing
:
val = np.intersect1d(df1.Name, df2.Name)
print (val)
['Ben']
df = pd.concat([df1,df2], ignore_index=True)
print (df[df.Name.isin(val)])
Name Number Other
1 Ben 2 True
4 Ben 5 False
val
另一种可能的解决方案是集合的intersection
:
val = set(df1.Name).intersection(set(df2.Name))
print (val)
{'Ben'}
然后可能重置索引到单调:
df = pd.concat([df1,df2])
print (df[df.Name.isin(val)].reset_index(drop=True))
Name Number Other
0 Ben 2 True
1 Ben 5 False
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.