首页 > 解决方案 > 将 n 列重新堆叠为 3 列 Python

问题描述

我有一个看起来像这样的数据框(第一行索引号):

0      1      2      3       4       5       6        7       8

66     56     34     40     41      55       80      None     None
90     91     12     44     89      60       11      45       60
10     20     49     90     33      40       67      55       None
.
.

作为输出,我需要获取每个第三个值,忽略任何None 值并将其重新堆叠成一行,如下所示:

0       1         2 

66      56        34
40      41        55
80      90        91
12      44        89
60      11        45
60      10        20
49      90        33
40      67        55

有没有一种简单的方法可以以这种方式旋转和堆叠它?

标签: pythonpython-3.xpandasdataframe

解决方案


首先,我们可以将所有值转换为带有 的平面数组ravel,然后过滤掉Nones 和reshape

x = df.values.ravel()
x[x != None].reshape(-1,3)  # pd.DataFrame(x[x != None].reshape(-1,3))
                            # if you want to have a DataFrame instead of
                            # numpy array

输出:

array([[66., 56., 34.],
       [40., 41., 55.],
       [80., 90., 91.],
       [12., 44., 89.],
       [60., 11., 45.],
       [60., 10., 20.],
       [49., 90., 33.],
       [40., 67., 55.]])

推荐阅读