Skip to main content
 首页 » 编程设计

python之以每列仅包含 Pandas 中的相同值的方式对列进行排序

2025年05月04日23dflying

我将给出一个我想要的非常简单的例子(因为我正在处理一个非常大的数据集,所以希望这个任务实际上是可行的)

假设我有以下数据框,其中包含以下行、列和相应的值:

A     B     C 
1     2     5      
2     3     7 
3     7     9 

成为

A    B   C   D   E   F 
1    2       5 
     2   3       7 
         3       7   9 

所以基本上,总而言之,我希望每一列只有一个数字(但我也希望代码适用于字符串而不是整数,因为这就是我正在做的事情)并且我希望每一行保留它原来的所有数字,只是它们将被分配到许多列。此外,我目前有大约 400,000 行和 300 列可供处理,当然需要创建更多的列才能执行此操作,因此这里也存在计算成本高昂的问题。有什么建议么?谢谢!

编辑:

我从实际数据集中添加了一个非常小的样本,因为它可能更好地告知我正在使用的数据类型:

  1               2             3 
0 220008-926      22008-970     None 
1 10755-JT        None          None 
2 16218-230       None          None 
3 None            16218-230     10755-JT 

我要把上面的转换成下面的

     22008-926       22008-970     10755-JT    16218-230 
 
0    22008-926       22008-970 
1                                  10755-JT 
2                                              16218-230  
3                                  10755-JT    16218-230   

之后显示如下,但是一旦我弄清楚了前一步,我就可以做这最后一步(目前标题只是 1、2、3... 而不是 22008-926、22008-970, 10755-JT)...

  22008-926       22008-970     10755-JT        16218-230  
0     1              1             0               0 
1     0              0             1               0 
2     0              0             0               1 
3     0              0             1               1 

请您参考如下方法:

这是一种方法-

def expand_arr(a):  # a is array   
    unq = np.unique(a) 
    m,n = a.shape[0], len(unq) 
    out = np.zeros((m,n), dtype=a.dtype) 
    out[np.arange(m)[:,None], np.searchsorted(unq, a)] = a 
    return out 

sample 运行-

In [280]: df 
Out[280]:  
   A  B  C 
0  1  2  5 
1  2  3  7 
2  3  7  9 
 
In [281]: pd.DataFrame(expand_arr(df.values)) 
Out[281]:  
   0  1  2  3  4  5 
0  1  2  0  5  0  0 
1  0  2  3  0  7  0 
2  0  0  3  0  7  9