2015-09-01 44 views
6

有什麼辦法直接將一個Series加入到DataFrame中?如何將一個系列加入DataFrame?

連接將位於數據框的字段和系列的索引上。

我發現的唯一方法是首先將該系列轉換爲數據框,如下面的代碼所示。

import numpy as np 
import pandas as pd 

df = pd.DataFrame() 
df['a'] = np.arange(0, 4) 
df['b'] = np.arange(100, 104) 


s = pd.Series(data=np.arange(100, 103)) 

# this doesn't work 
# myjoin = pd.merge(df, s, how='left', left_on='a', right_index=True) 

# this does 
s = s.reset_index() 
# s becomes a Dataframe 
# note you cannot reset the index of a series inplace 
myjoin = pd.merge(df, s, how='left', left_on='a', right_on='index') 

print myjoin 
+1

對不起,你只是想添加一個新的列,例如:'df ['new_col'] = df ['a']。map(s)'? – EdChum

+0

我相信你的問題的解決方案(用'reset_index()'來製作一個數據框)是正確的解決方案。 – itzy

+0

我想將Series中的列添加到數據框中,但是如何指定它應該是左外連接還是內連接,以及如何指定該系列的索引應該匹配哪個數據幀的列?謝謝 –

回答

0

嘗試CONCAT():

import numpy as np 
import pandas as pd 

df= pd.DataFrame() 
df['a']= np.arange(0,4) 
df['b']= np.arange(100,104) 

s =pd.Series(data = np.arange(100,103)) 

new_df = pd.concat((df, s), axis=1) 
print new_df 

此打印:

a b 0 
0 0 100 100 
1 1 101 101 
2 2 102 102 
3 3 103 NaN 
3

我猜http://pandas.pydata.org/pandas-docs/stable/generated/pandas.concat.html可能的幫助。

例如內/外連接。

pd.concat((df,s), axis=1) 
Out[26]: 
    a b 0 
0 0 100 100 
1 1 101 101 
2 2 102 102 
3 3 103 NaN 

In [27]: pd.concat((df,s), axis=1, join='inner') 
Out[27]: 
    a b 0 
0 0 100 100 
1 1 101 101 
2 2 102 102 
+2

這是否加入索引?在我的情況下,索引是不同的,我想指定要加入的字段,但concat似乎沒有on,left_on,right_on像pd.merge那樣的參數 –

+0

是的,它加入索引。僅解決此部分>>我想將Series中的列添加到數據框中,但是如何指定它應該是左外部聯接還是內部聯接 – Alex

+0

mmm,因此是將序列轉換爲數據幀的唯一方法與reset_index?這會將索引轉換爲列,並將其添加到合併函數的結果中。因此我需要刪除它。這一切似乎不必要的複雜! –

0

這是一個非常晚的答案,但什麼工作對我來說是建設有你想在你的系列檢索列的數據幀,命名此係列爲你需要的指數, 系列追加到數據幀(如果系列中有輔助元素,則它們將添加到數據框中,在某些應用程序中可能比較方便),然後將此索引的最終數據框加入要擴展的原始數據框。一致認爲它不是直接的,但如果你有很多系列,這仍然是最方便的方式,而不是首先在數據框中轉換每個系列。

相關問題