我有一个数据集:
name val
a a1
a a2
b b1
b b2
b b3
c c1
我想让所有可能的排列"名称"它们是不一样的。所以期望的结果是:
name1 val1 name2 val2
a a1 b b1
a a1 b b2
a a1 b b3
a a2 b b1
a a2 b b2
a a2 b b3
a a1 c c1
a a2 c c2
b b1 c c1
b b2 c c1
b b3 c c1
怎么做?我想写一个函数,可以对相同结构的更大的表进行相同的操作
我想使它有效,因为原始数据有几千行
最简单的方法是交叉合并和查询,如果您有足够的内存来存储几百万行,这还不错:
df.merge(df, how='cross', suffixes=['1','2']).query('name1 < name2')
输出:
name1 val1 name2 val2
2 a a1 b b1
3 a a1 b b2
4 a a1 b b3
5 a a1 c c1
8 a a2 b b1
9 a a2 b b2
10 a a2 b b3
11 a a2 c c1
17 b b1 c c1
23 b b2 c c1
29 b b3 c c1