例如假设我有两列 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
最佳答案
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
详细信息:
分配
一个伪键并使用merge
“自连接”以创建笛卡尔积
然后使用query
过滤结果并drop
键。
关于Python 列合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58311081/