【问题标题】:Combine two distinct dataframes to show all possible iterations组合两个不同的数据框以显示所有可能的迭代
【发布时间】:2017-05-08 18:55:14
【问题描述】:

我希望在 Python 中组合数据帧 df1 和 df2 以获取 df3,最好是单行(也就是说,没有“对于 df1.LETS 中的所有 x...” )。

我目前在使用 Google-fu 时不知所措,所以我在 StackExchange,希望其他程序员可以帮助填补我的这种困境。

谢谢!

df1    df2      df3
LETS   NUMS     LETS  NUMS
 A      1        A     1
 B      2        A     2
        3        A     3
        4        A     4
                 B     1
                 B     2
                 B     3
                 B     4

【问题讨论】:

    标签: python dataframe


    【解决方案1】:

    你可以使用:

    df1 = pd.DataFrame({'LETS':list('AB')})
    df2 = pd.DataFrame({'NUMS':range(1,5)})
    

    cross join 解决方案与merge + assign 列与constantdrop 辅助列A

    df = pd.merge(df1.assign(A=1), df2.assign(A=1), on='A').drop('A', axis=1)
    print (df)
      LETS  NUMS
    0    A     1
    1    A     2
    2    A     3
    3    A     4
    4    B     1
    5    B     2
    6    B     3
    7    B     4
    

    另一个解决方案 MultiIndex.from_product 和 pandas 中的新功能 0.20.1 - MultiIndex.to_frame

    df = pd.MultiIndex.from_product([df1['LETS'], df2['NUMS']]).to_frame()
    df.columns = ['LETS','NUMS']
    print (df)
        LETS  NUMS
    A 1    A     1
      2    A     2
      3    A     3
      4    A     4
    B 1    B     1
      2    B     2
      3    B     3
      4    B     4
    
    print (df.reset_index(drop=True))
      LETS  NUMS
    0    A     1
    1    A     2
    2    A     3
    3    A     4
    4    B     1
    5    B     2
    6    B     3
    7    B     4
    

    【讨论】:

      【解决方案2】:
      pd.DataFrame(index=pd.MultiIndex.from_product([df1.LETS, df2.NUMS],
                                names=("LETS", "NUMS"))).reset_index()
      #   LETS  NUMS
      #0    A     1
      #1    A     2
      #2    A     3
      #3    A     4
      #4    B     1
      #5    B     2
      #6    B     3
      #7    B     4
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-19
        • 2018-12-19
        • 2022-12-31
        相关资源
        最近更新 更多