gpt4 book ai didi

python - 如何准确合并两个具有完全不同列的不同 DataFrame

转载 作者:行者123 更新时间:2023-12-01 00:26:00 24 4
gpt4 key购买 nike

例如,有两个数据框,即 df1(n x m1)df2(n x m2),它们之间没有公共(public)列。那么如何合并数据帧以使输出数据帧的形状恰好为 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))

最佳答案

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

第一种方式:

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

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

关于python - 如何准确合并两个具有完全不同列的不同 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58585618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com