使用Python有条件地将矩阵转换为列

时间:2017-10-10 13:45:33

标签: python

我有一个大型DataFrame(大约2500x2500),我想选择符合条件的所有值(在这个特定情况下,那些> 50),然后将它们读入列

我有以下代码来选择这些值> 50,但它有点把它变成我缺少的列

data[(data >= 50)]

我的数据的较小版本将是

     AAAA  BBBB  CCCC  DDDD  EEEE  FFFF  GGGG  HHHH IIII
AAAA 80    4     0     65    17    32    42    93   27
BBBB 4     21    37    256   12    0     1     32   62
CCCC 0     37    0     32    67    34    2     0    26
DDDD 65    256   32    12    8     31    53    61   1
EEEE 17    12    67    8     8     3     74    1    6
FFFF 32    0     34    31    3     23    15    93   23
GGGG 42    1     2     53    74    15    180   123  32
HHHH 93    32    0     61    1     93    123   8    7
IIII 27    62    26    1     6     23    32    7    10

我想要的是一个列表,第1列作为索引,第2列作为标题,然后是任何大于50的值。这将如下所示;

index   Header  Value
AAAA    AAAA    80
AAAA    DDDD    67
AAAA    HHHH    93
BBBB    DDDD    256
BBBB    IIII    62
CCCC    EEEE    67
DDDD    BBBB    256
DDDD    GGGG    53
DDDD    HHHH    61
EEEE    CCCC    67
EEEE    GGGG    74
FFFF    HHHH    93
GGGG    EEEE    74
GGGG    GGGG    180
GGGG    HHHH    123
HHHH    AAAA    93
HHHH    DDDD    61
HHHH    FFFF    93
HHHH    GGGG    123
IIII    BBBB    62

1 个答案:

答案 0 :(得分:1)

实现此目标的一种方法是使用pandas.melt()。首先,您需要从DataFrame的索引创建一个id变量:

data['index'] = data.index

您可以融化DataFrame(即从长格式转换为长格式),将id_vars指定为'索引'柱:

data_melt = pd.melt(data, id_vars='index')

data_melt如下所示:

    index   variable    value
0   AAAA    AAAA    80
1   BBBB    AAAA    4
2   CCCC    AAAA    0
3   DDDD    AAAA    65
4   EEEE    AAAA    17
5   FFFF    AAAA    32

最后一步是过滤掉value >= 50的所有行:

data_melt[data_melt['value'] >= 50]

这将为您提供所需的输出:

    index   variable    value
0   AAAA    AAAA    80
3   DDDD    AAAA    65
7   HHHH    AAAA    93
12  DDDD    BBBB    256
17  IIII    BBBB    62