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

时间:2019-11-28 13:51:41

标签: 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.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之后返回新数据帧吗?

这样做会使计算机内存消耗很大,因为这并不是真正的减少:

df = df.groupby(['A', 'B'])['C'].apply(list, meta=(float)).compute()

1 个答案:

答案 0 :(得分:1)

我们可以使用:

[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]]

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)