【问题标题】:How to exactly merge two different DataFrames having completely different columns between them如何精确合并两个不同的DataFrame,它们之间有完全不同的列
【发布时间】:2020-02-23 09:44:20
【问题描述】:

例如,有两个数据框,即 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)) 的资源却出奇地难以找到。 对于上面的示例或小尺寸数据样本,下面的合并方法表现完美。

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

但合并方法不适用于具有大量元素的高维数据帧。以 kaggle 房屋定价数据集为例

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

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

【问题讨论】:

  • 你想并排连接它们吗?
  • 你的预期输出是什么?
  • 是的。只想插入来自另一个数据帧的所有列,当前数据帧之间没有公共列。
  • 你试过简单的df1.join(df2)吗?
  • pd.concat([df1, df2], axis=1)

标签: python pandas dataframe merge


【解决方案1】:

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

第一种方式:

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

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

【讨论】:

  • 第二个和第三个完美运行。第一个没有按预期保持尺寸。
  • @SofiUllahSaikat 它对我有用……无论如何,记得在时钟后接受
  • 我认为第一个应该可以。但就我而言,尺寸大小(行)减少了 1。我必须弄清楚为什么会这样。
【解决方案2】:

由于您没有公共列,因此我假设您想将它们并排(轴 = 1)连接:

df1.concat(df2,axis=1)

这将连接列轴上的两个数据框。

【讨论】:

  • 但它显示了 AttributeError: 'DataFrame' object has no attribute 'concat'
  • 你的 Pandas 版本是多少?
  • 熊猫版本 0.24.2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 2022-10-21
  • 1970-01-01
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
相关资源
最近更新 更多