Python Pandas: несколько агрегатов -> список значений - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть DataFrame, который содержит результаты нескольких функций агрегирования, примененных к нескольким столбцам, например:

bar = pd.DataFrame([
    {'a': 1, 'b': 2, 'grp': 0}, {'a': 3, 'b': 8, 'grp': 0}, 
    {'a': 2, 'b': 2, 'grp': 1}, {'a': 4, 'b': 5, 'grp': 1}
])
bar.groupby('grp').agg([np.mean, np.std])

        a               b
    mean   std      mean  std
grp             
0   2   1.414214    5.0 4.242641
1   3   1.414214    3.5 2.121320

Я хочу объединить результаты агрегирования в списки (или кортежи):

grp        a                 b  
0   [2, 1.414214]     [5.0, 4.242641]
1   [3, 1.414214]     [3.5, 2.121320]

Каков был бы правильный способ сделать это?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Каков был бы правильный способ сделать это?

Существует нет правильного пути. Панды никогда не были предназначены для хранения списков в сериях / колонках. Вы можете придумать дорогие обходные пути, но это не рекомендуется.

Основная причина, по которой удерживать списки в серии не рекомендуется, заключается в том, что вы теряете все векторизованные функциональные возможности, связанные с наличием числовых рядов с массивами NumPy, которые содержатся в смежных блоках памяти. Ваша серия будет иметь тип object d, который представляет собой последовательность указателей. Вы потеряете преимущества с точки зрения памяти и производительности.

См. Также В чем преимущества NumPy перед обычными списками Python? Аргументы в пользу панд такие же, как и для NumPy.

0 голосов
/ 06 сентября 2018

Если , вы должны использовать списки в столбцах. Вы можете

In [60]:  bar.groupby('grp').agg(lambda x: [x.mean(), x.std()])
Out[60]:
                             a                          b
grp
0    [2.0, 1.4142135623730951]   [5.0, 4.242640687119285]
1    [3.0, 1.4142135623730951]  [3.5, 2.1213203435596424]

Не рекомендуется хранить подобные данные для панд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...