我有一个巨大的熊猫数据框,有数百万行和数千列。 请参见下面的示例。你知道吗
X Y col_1 col_2 col_3 col_4 col_5 col_6 col_7 col_8 col_9 col_10
0 A 1 0 0 0 0 0 1 1 1 1 1
1 B 1 0 0 0 0 0 1 1 1 1 1
2 C 2 0 0 0 0 0 1 1 1 1 1
3 A 3 0 0 0 0 0 1 1 1 1 1
我想在X
上使用pd.melt
,在col_1
到col_10
列中使用Y
来融化数据帧。我将在我的原始数据帧中有更多的列。你知道吗
我可以这样做
pd.melt(s, ['X', 'Y'], [x for x in s.columns if x not in ['X', 'Y']])
融化后,我会有一个这样的数据帧
X Y variable value
0 A 1 col_1 0
1 B 1 col_1 0
2 C 2 col_1 0
3 A 3 col_1 0
4 A 1 col_2 0
5 B 1 col_2 0
6 C 2 col_2 0
7 A 3 col_2 0
8 A 1 col_3 0
9 B 1 col_3 0
10 C 2 col_3 0
11 A 3 col_3 0
12 A 1 col_4 0
13 B 1 col_4 0
14 C 2 col_4 0
15 A 3 col_4 0
16 A 1 col_5 0
17 B 1 col_5 0
18 C 2 col_5 0
19 A 3 col_5 0
20 A 1 col_6 1
21 B 1 col_6 1
22 C 2 col_6 1
23 A 3 col_6 1
24 A 1 col_7 1
25 B 1 col_7 1
26 C 2 col_7 1
27 A 3 col_7 1
28 A 1 col_8 1
29 B 1 col_8 1
30 C 2 col_8 1
31 A 3 col_8 1
32 A 1 col_9 1
33 B 1 col_9 1
34 C 2 col_9 1
35 A 3 col_9 1
36 A 1 col_10 1
37 B 1 col_10 1
38 C 2 col_10 1
39 A 3 col_10 1
我只对值为1
的行感兴趣,所以我会这样做
melted.loc[melted['value'] == 1]
只获取所需的行。你知道吗
但当我的数据如此庞大时,我会出现内存不足的错误,因为融化的数据填满了我的RAM并阻塞了它。这很有道理。你知道吗
我想在融化自己的同时根据变量进行过滤。类似于melt_filter
这样我就不会耗尽内存。你知道吗
在我上面展示的例子中,列col_6
到col_10
只是有1
,然后可以先过滤再熔化。但事实并非如此。我将有一些混合了0
和1
的行。因此,我不能过滤之前的手。你知道吗
这样的事情可能吗。?如果是,怎么做。?你知道吗
编辑:许多评论解释如何通过某种方式过滤数据并将数据融化。我不能这样做,因为在实际数据中,没有任何列将完全为0,也没有任何列将完全为1。它将是0和1的混合。你知道吗
更新 感谢@rafaelc的评论。我相信这个使用
np.nonzero
的解决方案的内存效率要高得多:输出(值部分并不重要,因为它是1):
相关问题 更多 >
编程相关推荐