Python Pandas-Groupby上的笛卡尔积

Python Pandas-Groupby上的笛卡尔积,python,pandas-groupby,cartesian-product,Python,Pandas Groupby,Cartesian Product,我有一个数据帧 df: 在对col1进行groupby之后,我想在(col2=B的不同col3值和col2=C的不同col3值)之间进行笛卡尔积 结果数据帧: 最终: col1 n1 n2 JHGK name1 name3 JHGK name2 name3 ERTH name5 name6 取df的子集,其中col2是B,取df的子集,其中col2是C。然后在col1上进行连接,删除一些额外的列,然后重命名。:) 取df的子集,其中col2是B,取df的子集,其中

我有一个数据帧

df:

在对col1进行groupby之后,我想在(col2=B的不同col3值和col2=C的不同col3值)之间进行笛卡尔积

结果数据帧:

最终:

col1   n1     n2
JHGK   name1  name3
JHGK   name2  name3
ERTH   name5  name6

取df的子集,其中
col2
是B,取df的子集,其中
col2
是C。然后在
col1
上进行连接,删除一些额外的列,然后重命名。:)


取df的子集,其中
col2
是B,取df的子集,其中
col2
是C。然后在
col1
上进行连接,删除一些额外的列,然后重命名。:)

col1   n1     n2
JHGK   name1  name3
JHGK   name2  name3
ERTH   name5  name6
>>> import pandas as pd
>>> df = pd.DataFrame({'col1': ['JHGK','JHGK','JHGK','OPDR','ERTH','ERTH'], 'col2': ['B','B','C','B','B','C'], 'col3': ['name1','name2','name3','name4','name5','name6']})
>>> df
   col1 col2   col3
0  JHGK    B  name1
1  JHGK    B  name2
2  JHGK    C  name3
3  OPDR    B  name4
4  ERTH    B  name5
5  ERTH    C  name6
>>> df_joined = df[df['col2'] == 'B'].merge(df[df['col2'] == 'C'], on='col1').drop(['col2_x', 'col2_y'], axis=1).rename(columns={'col3_x': 'n1', 'col3_y': 'n2'})
>>> df_joined
   col1     n1     n2
0  JHGK  name1  name3
1  JHGK  name2  name3
2  ERTH  name5  name6