Pandas:执行混合交叉连接和内部连接
Pandas: perform mixed cross join and inner joins
我正在使用以下包含 600,000 行的大型数据框 df
:
idx1 idx2 Val
38 4 101
38 23 103
39 4 104
39 23 105
40 4 105
40 23 106
idx2
对于每个 idx1
都是一样的。
我需要在 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
我正在使用以下包含 600,000 行的大型数据框 df
:
idx1 idx2 Val
38 4 101
38 23 103
39 4 104
39 23 105
40 4 105
40 23 106
idx2
对于每个 idx1
都是一样的。
我需要在 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