2015-09-01 42 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

这是一个非常晚的答案,但什么工作对我来说是建设有你想在你的系列检索列的数据帧,命名此系列为你需要的指数, 系列追加到数据帧(如果系列中有辅助元素,则它们将添加到数据框中,在某些应用程序中可能比较方便),然后将此索引的最终数据框加入要扩展的原始数据框。一致认为它不是直接的,但如果你有很多系列,这仍然是最方便的方式,而不是首先在数据框中转换每个系列。

相关问题