用Pandas合并索引上的 Dataframe

zhte4eai  于 2023-02-20  发布在  其他
关注(0)|答案(3)|浏览(156)

我有两个 Dataframe ,每个 Dataframe 有两个索引列。我想合并它们。例如,第一个 Dataframe 如下:

V1
A      1/1/2012    12
       2/1/2012    14
B      1/1/2012    15
       2/1/2012     8
C      1/1/2012    17
       2/1/2012     9

第二个 Dataframe 如下:

V2
A      1/1/2012    15
       3/1/2012    21
B      1/1/2012    24
       2/1/2012     9
D      1/1/2012     7
       2/1/2012    16

因此我想得到以下结果:

V1   V2
A      1/1/2012    12   15
       2/1/2012    14  N/A
       3/1/2012   N/A   21
B      1/1/2012    15   24
       2/1/2012     8    9
C      1/1/2012    17  N/A
       2/1/2012     9  N/A
D      1/1/2012   N/A    7
       2/1/2012   N/A   16

我已经尝试了几个版本使用pd.merge.join方法,但似乎没有工作。你有什么建议吗?

0pizxfdo

0pizxfdo1#

您应该能够使用join,默认情况下它在索引上进行连接。如果您想要得到所需的结果,则必须使用outer作为连接类型。

>>> df1.join(df2, how='outer')
            V1  V2
A 1/1/2012  12  15
  2/1/2012  14 NaN
  3/1/2012 NaN  21
B 1/1/2012  15  24
  2/1/2012   8   9
C 1/1/2012  17 NaN
  2/1/2012   9 NaN
D 1/1/2012 NaN   7
  2/1/2012 NaN  16

签名:_.join(其他,打开=无,方式=“左”,左后缀=“”,右后缀=“”,排序=False)文档字符串:在索引或键列上将列与其他DataFrame联接。通过传递列表,一次按索引高效地联接多个DataFrame对象。

tyg4sfes

tyg4sfes2#

您可以使用merge执行此操作:

df_merged = df1.merge(df2, how='outer', left_index=True, right_index=True)

关键字参数how='outer'保留两个帧中的所有索引,用NaN填充缺失的索引。关键字参数left_indexright_index使合并在索引上完成。如果在合并后得到一列中的所有NaN,另一个故障排除步骤是验证索引是否具有相同的dtypes
上面的merge代码为我生成了以下输出:

V1    V2
A 2012-01-01  12.0  15.0
  2012-02-01  14.0   NaN
  2012-03-01   NaN  21.0
B 2012-01-01  15.0  24.0
  2012-02-01   8.0   9.0
C 2012-01-01  17.0   NaN
  2012-02-01   9.0   NaN
D 2012-01-01   NaN   7.0
  2012-02-01   NaN  16.0
6jjcrrmo

6jjcrrmo3#

您也可以水平连接,因为concat在索引上匹配并且默认执行外部连接,所以只需传递axis=1参数来指定水平连接就足够了。

joined_df = pd.concat([df1, df2], axis=1)

mergejoin 1相比,concat的一个优点是,您可以传递一个 Dataframe 列表,并一次连接许多帧,而不会引起太大的麻烦。

joined_df = pd.concat([df1, df2, df1, df2], axis=1)

1对于join也可以这样做,但是如果有重复的列名,则必须在join调用之前处理它们,而对于concat,这无关紧要。

相关问题