我有两个具有相同索引的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
有办法做到这一点吗?
答案 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 join
或outer 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