将 groupby 值转换为数组列表

ire*_*ene 4 python pandas

这是一个示例数据框:

label  data
a      1.09
b      2.1
a      5.0
b      2.0
c      1.9
Run Code Online (Sandbox Code Playgroud)

我想要的是

arr = [[1.09, 5.0], [2.1, 2.0],[1.9]]
Run Code Online (Sandbox Code Playgroud)

最好是一个 numpy 数组列表。

我知道这df.groupby.groups.keys()给了我列表['a','b','c'],并df.groupby.groups.values()给了我类似的东西arr,但作为一个Int64Index对象。但是,我试过了df.loc[df.groupby.groups.values()]['label'],并没有得到想要的结果。

我该如何实现?谢谢!

cs9*_*s95 5

最好是一个 numpy 数组列表。

最好不要,因为您要求的是ragged arrays,这意味着内部数组(AKA,行)的长度不同。这对 numpy 来说很不方便,这意味着它不能在内部像 C 数组一样有效地存储这些数组。它最终回落到缓慢的 python 对象。

在这种情况下,我建议使用嵌套的 Python 列表。这可以通过groupby+实现apply

lst = df.groupby('label')['data'].apply(pd.Series.tolist).tolist()
print(lst)
[[1.09, 5.0], [2.1, 2.0], [1.9]]
Run Code Online (Sandbox Code Playgroud)