Sql 熊猫1=1的加入
我在一个数据帧(df1)中有两个分类列。我创建了CatA和CatB的每个组合,使其具有日期范围(df2)的长度。我希望将df1和df2合并到一个数据帧中,以便每个CatA和CatB组合都可以使用日期范围 我怎样才能在熊猫身上做到这一点?我看到join方法的文档只支持left、right、outer和inner。在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
您已经有了
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