如何准确合并两个不同的DataFrame,它们之间具有完全不同的列

时间:2019-10-28 03:56:57

标签: python pandas dataframe merge

例如,有两个数据框,即 df1(n x m1) df2(n x m2),它们之间没有公共列。然后如何合并数据框,以使输出数据框的形状精确地为 n x(m1 + m2)

df1 = pd.DataFrame({
    'col_1': [0, 1, 2, 3],
    'col_2': [4, 5, 6, 7]})

df2 = pd.DataFrame({
    'col_3': [6, 4, 3, 1],
    'col_4': [9, 3, 7, 1], 
    'col_5': [19, 13, 17, 10]})

此社区中发布了许多有关以下问题的解决方案,网络上也提供了解决方案。但是,很难找到用于保存上述尺寸(n x(m1 + m2))的资源。 对于上面的示例或较小的数据样本,下面的merge方法执行得很好。

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

但是merge方法在具有巨大元素的高维数据帧上无法正确执行。对于kaggle房屋定价数据集

  

https://www.kaggle.com/c/house-prices-advanced-regression-techniques

将数字和分类特征(数据帧)分开后,当尝试在保持行大小相同的情况下合并它们时,它变成两个数据帧的行总和的两倍(2 *(n + n))用于以下合并方法。他们是否有其他合适的方法或适当的方法来完成任务?

2 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点:

第一种方式:

print(df1.join(df2))

第二种方式:

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

第三种方式:

print(df1.merge(df2, left_index=True, right_index=True))

时间:

from timeit import timeit
df1 = pd.DataFrame({
    'col_1': [0, 1, 2, 3],
    'col_2': [4, 5, 6, 7]})

df2 = pd.DataFrame({
    'col_3': [6, 4, 3, 1],
    'col_4': [9, 3, 7, 1], 
    'col_5': [19, 13, 17, 10]})

print('First Solution', timeit(lambda: df1.join(df2), number=10000))
print('Second Solution', timeit(lambda: pd.concat([df1, df2], axis=1), number=10000))
print('Third Solution', timeit(lambda: df1.merge(df2, left_index=True, right_index=True), number=10000))

第二个解决方案获胜:

First Solution 8.202560314644044
Second Solution 7.059892805897661
Third Solution 7.59388310738364

当然,当您不需要最佳性能时,也可以使用第一个和第三个,我主要使用第一个,因为它很短。

答案 1 :(得分:0)

由于您没有公共列,因此我假设您要以并列(axis = 1)为基础进行合并:

df1.concat(df2,axis=1)

这将在列轴上合并两个数据框。