我正在处理以下600000行的大型数据帧df
:
idx1 idx2 Val
38 4 101
38 23 103
39 4 104
39 23 105
40 4 105
40 23 106
CCD_ 2对于每个CCD_。
我需要对df
执行联接,使列idx1
上有cross join
,列idx2
上有inner join
,以获得以下内容:
idx1 idx2 Val idx11 idx21 Val1
38 4 101 39 4 104
38 23 103 39 23 105
38 4 101 40 4 105
38 23 103 40 23 106
39 4 104 40 4 105
39 23 105 40 23 106
我不知道如何处理上述问题。
尝试#2:
df.merge(df, how='cross').query('idx2_x == idx2_y and idx1_x != idx1_y')
输出:
idx1_x idx2_x Val_x idx1_y idx2_y Val_y
2 38 4 101 39 4 104
4 38 4 101 40 4 105
9 38 23 103 39 23 105
11 38 23 103 40 23 106
12 39 4 104 38 4 101
16 39 4 104 40 4 105
19 39 23 105 38 23 103
23 39 23 105 40 23 106
24 40 4 105 38 4 101
26 40 4 105 39 4 104
31 40 23 106 38 23 103
33 40 23 106 39 23 105
试试这个:
df.merge(df, on='idx1', how='outer').query('idx2_x == idx2_y')
输出:
idx1 idx2_x Val_x idx2_y Val_y
0 38 4 101 4 101
3 38 23 103 23 103
4 39 4 104 4 104
7 39 23 105 23 105
8 40 4 105 4 105
11 40 23 106 23 106