我有一个数据框
DF:
col1 col2 col3
JHGK B name1
JHGK B name2
JHGK C name3
OPDR B name4
ERTH B name5
ERTH C name6
在对col1进行groupby之后,我想在(不同的col3值,其中col2 = B和不同的col3值,其中col2 = C)之间进行笛卡尔积。
结果数据框:
最后:
col1 n1 n2
JHGK name1 name3
JHGK name2 name3
ERTH name5 name6
答案 0 :(得分:2)
获取col2
为B的df的子集,并获取col2
为C的df的子集。然后在col1
上进行连接,删除一些额外的列,然后重命名。 :)
>>> 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