Python列合并

时间:2019-10-09 19:32:33

标签: python pandas

例如,假设我有两列A和B

A  B
1  2
2  3
3  4
4  5

而且,我想将上述pandas数据框转换为以下示例。我尝试了merge,但是却得到了重复的值。

A_X B_X       A_Y  B_Y

1    2         2     3
1    2         3     4
1    2         4     5
2    3         3     4
2    3         4     5
3    4         4     5

1 个答案:

答案 0 :(得分:3)

IIUC,您可以尝试:

df.assign(key=1).merge(df.assign(key=1), on='key')\
  .query('A_x != A_y and B_x != B_y').drop('key', axis=1)

输出:

    A_x  B_x  A_y  B_y
1     1    2    2    3
2     1    2    3    4
3     1    2    4    5
4     2    3    1    2
6     2    3    3    4
7     2    3    4    5
8     3    4    1    2
9     3    4    2    3
11    3    4    4    5
12    4    5    1    2
13    4    5    2    3
14    4    5    3    4

或者过滤掉进一步的使用不平等:

df.assign(key=1).merge(df.assign(key=1), on='key')\
  .query('A_x < A_y and B_x < B_y').drop('key', axis=1)

输出:

    A_x  B_x  A_y  B_y
1     1    2    2    3
2     1    2    3    4
3     1    2    4    5
6     2    3    3    4
7     2    3    4    5
11    3    4    4    5

详细信息:

assign一个伪密钥,并使用merge进行“自连接”以创建笛卡尔积 然后使用query过滤结果并使用drop键。