Здесь образец данных:
label data
a 1.09
b 2.1
a 5.0
b 2.0
c 1.9
Я хочу, чтобы
arr = [[1.09, 5.0], [2.1, 2.0],[1.9]]
предпочтительно в виде списка массивов numpy.
Я знаю, что df.groupby.groups.keys()
дает мне список ['a','b','c']
, а df.groupby.groups.values()
дает мне что-то вроде arr
, но как Int64Index
объект. Тем не менее, я попробовал df.loc[df.groupby.groups.values()]['label']
и он не получил желаемого результата.
Как это сделать? Спасибо!
предпочтительно в виде списка массивов numpy.
Предпочтительно нет, потому что вы просите оборванные массивы, а это значит, что внутренние массивы (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]]
AttributeError: 'DataFrameGroupBy' object has no attribute 'data'