首页 > 解决方案 > 数据框中列的配对差异以生成具有 130 万列的数据框

问题描述

我有一个包含 1600 列的数据框。

数据框df看起来像列名的位置1, 3 , 2

Row Labels  1   3   2
41730Type1  9   6   5
41730Type2  14  12  20
41731Type1  2   15  5
41731Type2  3   20  12
41732Type1  8   10  5
41732Type2  8   18  16

df2我需要以python方式创建以下数据框:

Row Labels  (1, 2)  (1, 3)  (2, 3)
41730Type1  -4      -3       1
41730Type2  6       -2       -8
41731Type1  3       13       10
41731Type2  9       17        8
41732Type1  -3      2         5
41732Type2  8       10        2

egcolumn (1, 2)是由哪里创建的df[2] - df[1]

的列名称df2是通过配对列标题来创建的,df1这样每个名称的第二个元素大于第一个,例如(1, 2), (1, 3), (2, 3)

第二个挑战是 pandas 数据框能支持 130 万列吗?

标签: pandasdataframepython-3.8

解决方案


我们可以combinations为 column 做,然后创建dictconcat返回

import itertools
l=itertools.combinations(df.columns,2)
d={'{0[0]}|{0[1]}'.format(x) : df[x[0]]-df[x[1]] for x in [*l]  }
newdf=pd.concat(d,axis=1)
            1|3  1|2  3|2
RowLabels                
41730Type1    3    4    1
41730Type2    2   -6   -8
41731Type1  -13   -3   10
41731Type2  -17   -9    8
41732Type1   -2    3    5
41732Type2  -10   -8    2

推荐阅读