如何以特定的方式重塑我的数据集?



我有一个数据集:

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

最新更新