我有一个大型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
答案 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