【问题标题】:Create combination of two pandas dataframes in two dimensions在二维中创建两个熊猫数据框的组合
【发布时间】:2017-09-01 17:57:54
【问题描述】:

我有两个 pandas 数据框,df1 和 df2。我想创建一个数据框 df3,其中包含使用 df1 中的一列和 df2 中的一列的所有组合。效率低下的伪代码是这样的:

df3 = []
for i in df1:
     for j in df2:
         df3.append(i + j) # where i + j is the row with the combined cols from df1 and df2

df1 的格式如下:

df1_id    other_data_1    other_data_2
1         0               1
2         1               5

df2:

df2_id    other_data_3    other_data_4
1         0               1
3         2               2

我们的目标是得到这个输出 df3:

df1_id    df2_id    other_data_1    other_data_2    other_data_3    other_data_4
1         1         0               1               0               1
1         3         0               1               2               2
2         1         1               5               0               1
2         3         1               5               2               2

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    更新熊猫 1.2.0+

    df1.merge(df2, how='cross')
    

    在两个数据框之间设置一个公共键并使用pd.merge

    df1['key'] = 1
    df2['key'] = 1
    

    合并和删除键列:

    df3 = pd.merge(df1,df2,on='key').drop('key',axis=1)
    df3
    

    输出:

       df1_id  other_data_1  other_data_2  df2_id  other_data_3  other_data_4
    0       1             0             1       1             0             1
    1       1             0             1       3             2             2
    2       2             1             5       1             0             1
    3       2             1             5       3             2             2
    

    【讨论】:

    • 这是一个很好的解决方案,但对于“大数据帧”来说会非常慢
    • 没有更好的方法吗?喜欢不专门使用合并?
    • @ScottBoston 你是对的。该解决方案本身运行良好(谢谢)。我只是想知道是否有一种更简洁的方法可以做到这一点,不需要添加列然后再删除它们。
    • @MitaliCyrus 您可以使用 assign 在两个表中临时创建键,然后在不需要时删除结果的键。 df1.assign(key=1).merge(df2.assign(key=1), on='key').drop('key', axis=1)
    • @ScottBoston 谢谢。 :)
    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 2017-08-30
    • 2021-08-22
    • 2017-06-11
    • 2016-01-01
    • 2017-09-02
    相关资源
    最近更新 更多