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

2024-05-16 15:30:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大的数据帧(大约2500x2500),我想在其中选择所有符合条件的值(在这个特定的情况下,这些值是>;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

Tags: 数据代码gtdata情况ccccaaaadddd
1条回答
网友
1楼 · 发布于 2024-05-16 15:30:56

实现这一点的一种方法是使用pandas.melt()。首先,需要从数据帧的索引创建一个id变量:

data['index'] = data.index

您可以在熔化数据帧(即从宽格式改为长格式)之后,将id\u vars指定为“index”列:

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

数据如下所示:

    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

相关问题 更多 >