2017-08-22 102 views
0

我有一個熊貓系列S:合併數據框與系列基於

Date 
2/27/2017 149 
2/28/2017 150 
3/01/2017 154 
3/04/2017 152 
3/12/2017 156 
3/17/2017 148 

我也有一個數據幀DF

Date     A B C PS 
2/28/2017 12:42:05 1 2 4 2/27/2017 
2/28/2017 12:42:07 1 2 4 2/27/2017 
2/28/2017 12:42:08 1 2 4 2/27/2017 
2/28/2017 12:42:55 1 2 4 2/27/2017 
3/01/2017 12:42:05 1 2 4 2/28/2017 
3/01/2017 12:42:07 1 2 4 2/28/2017 
3/01/2017 12:42:08 1 2 4 2/28/2017 
3/01/2017 12:42:09 1 2 4 2/28/2017 
3/05/2017 12:42:05 1 2 4 3/04/2017 
3/05/2017 12:42:07 1 2 4 3/04/2017 
3/05/2017 12:42:08 1 2 4 3/04/2017 
3/05/2017 12:42:09 1 2 4 3/04/2017 

A,B,C做改變,但他們不相關對於這個問題。

我想有一個輸出數據幀如下:

Date     A B C PS   Value 
2/28/2017 12:42:05 1 2 4 2/27/2017 149 
2/28/2017 12:42:07 1 2 4 2/27/2017 149 
2/28/2017 12:42:08 1 2 4 2/27/2017 149 
2/28/2017 12:42:55 1 2 4 2/27/2017 149 
3/01/2017 12:42:05 1 2 4 2/28/2017 150 
3/01/2017 12:42:07 1 2 4 2/28/2017 150 
3/01/2017 12:42:08 1 2 4 2/28/2017 150 
3/01/2017 12:42:09 1 2 4 2/28/2017 150 
3/05/2017 12:42:05 1 2 4 3/04/2017 152 
3/05/2017 12:42:07 1 2 4 3/04/2017 152 
3/05/2017 12:42:08 1 2 4 3/04/2017 152 
3/05/2017 12:42:09 1 2 4 3/04/2017 152 

基本上,我想添加一個列到DF,所謂價值,在那個值對應於S系列的日期,那就是在df的PS列中。

中的僞是 DF [ 「價值」] = S [DF [PS]

我不想在從系列帶來日期列/索引。使用.merge()的系列

+1

這是一個簡單的'合併() '操作。閱讀有關'merge()'的任何教程。 – DyZ

+0

'df.info()'和's.info()'的輸出是什麼? (其中'df'和's'分別是您的數據框和系列的名稱)。 – Alexander

+0

'df.merge(s.to_frame(),left_on ='PS',right_index = True)'假設系列索引中的日期與'PS'列中的日期一致。 – Alexander

回答

-1

合併數據框:

new_df = df.merge(pd.DataFrame(s, columns=['Value']), right_index=True, left_on='PS', how='outer') 

您還可以重複PS,並從該系列中獲得的價值:

df.loc[:, 'Value'] = [s[ps] for ps in df['PS']] 
0

另外,從您的系列創建一個mapping並使用df.mapdf.replace

首先,創建一個映射:

In [1221]: mapping = dict(zip(s.index, s.values)) 

更換df.PS

In [1222]: df['Value'] = df.PS.replace(mapping) 

In [1223]: df 
Out[1223]: 
        A B C   PS Value 
Date           
2/28/2017 12:42:05 1 2 4 2/27/2017 149 
2/28/2017 12:42:07 1 2 4 2/27/2017 149 
2/28/2017 12:42:08 1 2 4 2/27/2017 149 
2/28/2017 12:42:55 1 2 4 2/27/2017 149 
3/01/2017 12:42:05 1 2 4 2/28/2017 150 
3/01/2017 12:42:07 1 2 4 2/28/2017 150 
3/01/2017 12:42:08 1 2 4 2/28/2017 150 
3/01/2017 12:42:09 1 2 4 2/28/2017 150 
3/05/2017 12:42:05 1 2 4 3/04/2017 152 
3/05/2017 12:42:07 1 2 4 3/04/2017 152 
3/05/2017 12:42:08 1 2 4 3/04/2017 152 
3/05/2017 12:42:09 1 2 4 3/04/2017 152 

您還可以使用df.map

In [1224]: df['Value'] = df.PS.map(mapping) 

In [1225]: df 
Out[1225]: 
        A B C   PS Value 
Date           
2/28/2017 12:42:05 1 2 4 2/27/2017 149 
2/28/2017 12:42:07 1 2 4 2/27/2017 149 
2/28/2017 12:42:08 1 2 4 2/27/2017 149 
2/28/2017 12:42:55 1 2 4 2/27/2017 149 
3/01/2017 12:42:05 1 2 4 2/28/2017 150 
3/01/2017 12:42:07 1 2 4 2/28/2017 150 
3/01/2017 12:42:08 1 2 4 2/28/2017 150 
3/01/2017 12:42:09 1 2 4 2/28/2017 150 
3/05/2017 12:42:05 1 2 4 3/04/2017 152 
3/05/2017 12:42:07 1 2 4 3/04/2017 152 
3/05/2017 12:42:08 1 2 4 3/04/2017 152 
3/05/2017 12:42:09 1 2 4 3/04/2017 152