Sql 熊猫1=1的加入

Sql 熊猫1=1的加入,sql,pandas,Sql,Pandas,我在一个数据帧(df1)中有两个分类列。我创建了CatA和CatB的每个组合,使其具有日期范围(df2)的长度。我希望将df1和df2合并到一个数据帧中,以便每个CatA和CatB组合都可以使用日期范围 我怎样才能在熊猫身上做到这一点?我看到join方法的文档只支持left、right、outer和inner。在SQL中,我将在1=1时加入 您已经有了df2,对吗 pd.concat([df1,df2],axis=1)做你想做的事吗 df1=pd.Dataframe(['a','b']) df

我在一个数据帧(df1)中有两个分类列。我创建了CatA和CatB的每个组合,使其具有日期范围(df2)的长度。我希望将df1和df2合并到一个数据帧中,以便每个CatA和CatB组合都可以使用日期范围

我怎样才能在熊猫身上做到这一点?我看到join方法的文档只支持left、right、outer和inner。在SQL中,我将在1=1时加入


您已经有了
df2
,对吗

pd.concat([df1,df2],axis=1)
做你想做的事吗

df1=pd.Dataframe(['a','b'])
df2=pd.Dataframe([1,2])
pd.concat([df1,df2],轴=1)
产生:

   0  0
0  a  1
1  b  2

我认为这就是您正在寻找的行为。

为了在分类列上联接,首先确保它们没有任何空值,如下所示

df1.dropna(axis=0, subset=['CatA'], inplace=True)
df2.dropna(axis=0, subset=['CatB'], inplace=True)
然后使用合并:

df_merged = pd.merge(df1, df2, 
                     how='inner', # inner join will do one on one 
                     left_on='CatA', right_on='CatB', 
                     sort=False # this will improve speed in big dfs
            )
注:

  • 您还可以在上的
    left\u和
    上的
    right\u中提供多个列作为列表

    • 您想要的是笛卡尔积。要完成此操作,您可以执行以下操作:

      df1=pd.DataFrame({'CatA':['A','B'],'CatB':['M','N']})
      df2=pd.DataFrame({'Date':['9/1/2020','9/2/2020','9/3/2020']})
      df1['''u tempkey']=1
      df2[''u tempkey']=1
      df1=df1.合并(df2,on=''临时键').删除(''临时键',轴=1)
      

      你提前知道CatA、CatB的数值和日期范围吗?如果是这样,有比使用pandas(例如itertools.产品)更高效、更干净的方法来完成这项任务
      df1.dropna(axis=0, subset=['CatA'], inplace=True)
      df2.dropna(axis=0, subset=['CatB'], inplace=True)
      
      df_merged = pd.merge(df1, df2, 
                           how='inner', # inner join will do one on one 
                           left_on='CatA', right_on='CatB', 
                           sort=False # this will improve speed in big dfs
                  )
      
        CatA CatB      Date
      0    A    M  9/1/2020
      1    A    M  9/2/2020
      2    A    M  9/3/2020
      3    B    N  9/1/2020
      4    B    N  9/2/2020
      5    B    N  9/3/2020