簡體   English   中英

Pandas:合並數據幀而不創建新列

[英]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 ,然后通過過濾isinnumpy.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM