Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列转换为列表列表(基于multindex)_Python_Pandas_Dask - Fatal编程技术网

Python 将列转换为列表列表(基于multindex)

Python 将列转换为列表列表(基于multindex),python,pandas,dask,Python,Pandas,Dask,假设我在一个大的hdf5文件上有这个数据帧 A B C 0 103896 1 2.0 1 103896 1 0.0 2 103896 1 5.0 3 103896 2 0.0 4 103896 2 7.0 5 103896 2 0 6 103896 2 0.0 7 103897 1 7.0 8 103897 1 0 基于前两列,我想创建一个最终列表,如下所示: [[2.0, 0.

假设我在一个大的hdf5文件上有这个数据帧

      A     B    C
0   103896  1   2.0
1   103896  1   0.0
2   103896  1   5.0
3   103896  2   0.0
4   103896  2   7.0
5   103896  2   0
6   103896  2   0.0
7   103897  1   7.0
8   103897  1   0
基于前两列,我想创建一个最终列表,如下所示:

[[2.0, 0.0, 5.0], [0.0, 7.0, 0, 0.0], [7.0, 0]]
为了做到这一点,我唯一的想法是:

 df = df.groupby(['A', 'B'])['C'].apply(list)
然后在df上迭代或仅转换:

final_list = df['C']
考虑到我的数据集很大,有没有其他方法在groupby之后不返回新的数据帧

使用dask执行此操作对于计算机内存来说代价高昂,因为这并不是真正的减少:

df = df.groupby(['A', 'B'])['C'].apply(list, meta=(float)).compute()
我们可以使用:

[list(c) for i,c in  df.groupby(['A','B'])['C']]
#[[2.0, 0.0, 5.0], [0.0, 7.0, 0.0, 0.0], [7.0, 0.0]]

时间比较:

  • 再次申请似乎比较慢


您知道如何使用dask为df.groupby(['A','B'])['c']]中的i,c列出(c)以避免在内存中加载整个数据集吗?
df.groupby(['A', 'B'])['C'].apply(list).tolist()
#[[2.0, 0.0, 5.0], [0.0, 7.0, 0.0, 0.0], [7.0, 0.0]]
%%timeit
[list(c) for i,c in  df.groupby(['A','B'])['C']]
1.82 ms ± 93.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%%timeit
df.groupby(['A', 'B'])['C'].apply(list).tolist()
3.38 ms ± 473 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)