2016-10-25 29 views
2

我想'廣播'從df1到df2的日期列。從一個數據框添加日期(系列)列到另一個熊貓,Python

在df1中,我擁有所有用戶及其基本信息的名稱。 在df2中,我有一個由用戶購買的列表。

df1 and df2 code

假設我有一個更大的數據集(以上爲樣本創建)我怎麼可以只添加(!)的DF1 [ 'DOB']列DF2?

我曾經嘗試都CONCAT()和合並(),但他們都不工作:

code and error

似乎工作的唯一方法是隻有當我合併兩個DF1和DF2在一起然後刪除我不需要的列。但是,如果我有幾十個不需要的列,這將是非常有問題的。

的完整代碼(包括拋出一個錯誤的線路):

import pandas as pd 
df1 = pd.DataFrame(columns=['Name','Age','DoB','HomeTown']) 

df1['Name'] = ['John', 'Jack', 'Wendy','Paul'] 
df1['Age'] = [25,23,30,31] 
df1['DoB'] = pd.to_datetime(['04-01-2012', '03-02-1991', '04-10-1986', '06-03-1985'], dayfirst=True) 
df1['HomeTown'] = ['London', 'Brighton', 'Manchester', 'Jersey'] 

df2 = pd.DataFrame(columns=['Name','Purchase']) 
df2['Name'] = ['John','Wendy','John','Jack','Wendy','Jack','John','John'] 
df2['Purchase'] = ['fridge','coffee','washingmachine','tickets','iPhone','stove','notebook','laptop'] 

df2 = df2.concat(df1) # error 

df2 = df2.merge(df1['DoB'], on='Name', how='left') #error 

df2 = df2.merge(df1, on='Name', how='left') 
del df2['Age'], df2['HomeTown'] 
df2 #that's how i want it to look like 

任何幫助將非常感激。謝謝:)

+2

使用像這樣的''pd.concat([df1,df2],axis = 1)' –

回答

1

我認爲你需要merge與子[['Name','DoB']] - 需要匹配Name列:

print (df1[['Name','DoB']]) 
    Name  DoB 
0 John 2012-01-04 
1 Jack 1991-02-03 
2 Wendy 1986-10-04 
3 Paul 1985-03-06 

df2 = df2.merge(df1[['Name','DoB']], on='Name', how='left') 
print (df2) 
    Name  Purchase  DoB 
0 John   fridge 2012-01-04 
1 Wendy   coffee 1986-10-04 
2 John washingmachine 2012-01-04 
3 Jack   tickets 1991-02-03 
4 Wendy   iPhone 1986-10-04 
5 Jack   stove 1991-02-03 
6 John  notebook 2012-01-04 
7 John   laptop 2012-01-04 

通過系列smap另一種解決方案:

s = df1.set_index('Name')['DoB'] 
print (s) 
Name 
John 2012-01-04 
Jack 1991-02-03 
Wendy 1986-10-04 
Paul 1985-03-06 
Name: DoB, dtype: datetime64[ns] 

df2['DoB'] = df2.Name.map(s) 
print (df2) 
    Name  Purchase  DoB 
0 John   fridge 2012-01-04 
1 Wendy   coffee 1986-10-04 
2 John washingmachine 2012-01-04 
3 Jack   tickets 1991-02-03 
4 Wendy   iPhone 1986-10-04 
5 Jack   stove 1991-02-03 
6 John  notebook 2012-01-04 
7 John   laptop 2012-01-04 
+0

我認爲'map()'解決方案是添加__single__列時效率最高的解決方案 – MaxU

+0

謝謝'MaxU'。 – jezrael

+0

謝謝! @jezrael –

相關問題