2017-05-21 65 views
1

我有一個熊貓據幀像人:如何創建具有兩個不同的數據的數據之間的聯繫的數據幀幀

pid name job 
    1 Mike  A 
    2 Lucy  A 
    3 Jeff  B 

,第二個像作業:

id name 
1  A 
2  B 
3  C 

我想要生成的是第三個數據幀,我列出了人與作業之間的連接,因此在此虛擬示例中,所需結果將爲:

personid jobid 
     1  1 
     2  1 
     3  2 

我該如何用熊貓來完成這項工作?我不知道如何在這種情況下加入的,因爲它不是一個由行的事...

回答

0

pandas嘗試,假設你有DF1和DF2:

import pandas as pd 
df1 = pd.read_csv('Data1.csv') 
df2 = pd.read_csv('Data2.csv') 
print df1 
print df2 

DF1:

pid name job 
0 1 Mike A 
1 2 Lucy A 
2 3 Jeff B 

和DF2:

id name 
0 1 A 
1 2 B 
2 3 C 

然後:

df2['job']=df2['name'] 
df_result = df1.merge(df2, on='job', how='left') 
print df_result[['pid','id']] 

它會打印出:

pid id 
0 1 1 
1 2 1 
2 3 2 
+0

有沒有辦法讓'工作'上的比較更智能?在我的真實生活場景中,字符串不匹配100% – user299791

+0

您對字符串不匹配100%意味着什麼?如果有骯髒的數據,可以在進行比較之前將其清理乾淨。合併必須得到一個共享密鑰,這應該在兩個數據幀中。 –

0

這是你在找什麼?

output = pd.merge(persons, jobs, how='left', left_on='job', right_on='name')[['pid', 'id']] 

輸出:

pid id 
0 1 1 
1 2 1 
2 3 2 
0

兩個給定dataframes如下:

import pandas as pd 
people_df = pd.DataFrame([[1, "Mike", "A"], [2, "Lucy", "A"], [3, "Jeff", "B"]], columns=["pid", "name", "job"]) 
jobs_df = pd.DataFrame([[1, "A"], [2, "B"], [3, "C"]], columns=["id", "name"]) 

您可以通過使用merge方法得到期望的結果。

merged_df = pd.merge(people_df, jobs_df, left_on='job', right_on='name') 
result = merged_df[['pid', 'id']].rename(columns={'pid': 'personid', 'id': 'jobid'}) # for extracting and renaming data 

「inner join」默認使用merge方法。如果需要,您可以使用how選項進行其他「加入」。

相關問題