Преобразуйте значения groupby в список массивов [duplicate]

1

Здесь образец данных:

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'] и он не получил желаемого результата.

Как это сделать? Спасибо!

Теги:
pandas

1 ответ

2
Лучший ответ

предпочтительно в виде списка массивов 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]]
  • 0
    Я получаю эту ошибку, хотя: AttributeError: 'DataFrameGroupBy' object has no attribute 'data'
  • 0
    @irene мммм это должно быть название твоей колонки? Попробуйте еще раз с немного другим синтаксисом, пожалуйста (отредактируйте ^).
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню