在Pandas中附加到DataFrame作为新列

时间:2015-08-06 17:56:28

标签: python pandas

我有两个具有相同索引的DataFrame,并希望将第二个附加到第一个。让我们说:

df1 = pd.DataFrame([1,2,3], index = [2,3,4])
df2 = pd.DataFrame([3,5,3], index = [2,3,4])
df1 = df1.append(df2)

返回

   0
2  1
3  2
4  3
2  3
3  5
4  3

但我希望它附加索引匹配的新列:

2  1  3
3  2  5
4  3  3

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:4)

使用concat并传递param axis=1以逐列方式连接dfs列表:

In [3]:

df1 = pd.DataFrame([1,2,3], index = [2,3,4])
df2 = pd.DataFrame([3,5,3], index = [2,3,4])
pd.concat([df1,df2], axis=1)
Out[3]:
   0  0
2  1  3
3  2  5
4  3  3

您也可以使用join,但必须先重命名该列:

In [6]:

df1.join(df2.rename(columns={0:'x'}))
Out[6]:
   0  x
2  1  3
3  2  5
4  3  3

merge指定您希望在索引上匹配:

In [8]:

df1.merge(df2.rename(columns={0:'x'}), left_index=True, right_index=True )
Out[8]:
   0  x
2  1  3
3  2  5
4  3  3

答案 1 :(得分:0)

如果索引完全匹配且其他DataFrame中只有一列(就像您的问题一样),那么您甚至可以将其他DataFrame添加为新列。

>>> df1['new_column'] = df2
>>> df1
   0  new_column
2  1           3
3  2           5
4  3           3

一般来说,concat方法更好。如果您有不同的索引,则可以选择inner joinouter join

>>> df2 = pd.DataFrame([3,5,3], index = [2,3,5])
>>> df2
   0
2  3
3  5
5  3

>>> pd.concat([df1, df2], axis=1, join='inner')
   0  0
2  1  3
3  2  5

>>> pd.concat([df1, df2], axis=1, join='outer')
    0   0
2   1   3
3   2   5
4   3 NaN
5 NaN   3