Специфическая агрегация данных в пандах - PullRequest
0 голосов
/ 20 мая 2019

У меня есть пандас DataFrame со столбцами, такими как «вес», «цена» и «id». Мой пользователь покупает несколько товаров с разными идентификаторами. Я хочу иметь статистику всей корзины / заказа пользователя, включая общий вес и общую цену. Если быть точным, у меня есть DataFrame df и список корзин с такими идентификаторами, как:

df.head()
    price   id  weight          
1   4.0    1    257.90125
2   4.0    2    87.52515
3   6.0    3    142.69750
4   6.0    4    444.77600
59  4.0    59   0.00000
baskets_list
[(587, 25, 11, 186, 587, 587),
 (587, 25, 12, 186, 587, 587),
 (587, 25, 13, 186, 587, 587),
 (587, 25, 14, 186, 587, 587),
 (587, 25, 15, 186, 587, 587),
 (587, 25, 16, 186, 587, 587),
 (587, 25, 17, 186, 587, 587)
]

Я хочу агрегировать этот фрейм данных по этому списку корзин (в корзине есть список идентификаторов товаров). Надеюсь, что кто-то может помочь мне с этим агрегацией.

1 Ответ

0 голосов
/ 20 мая 2019

Используйте понимание слова, чтобы выполнить каждую агрегацию, поднабор с .loc:

baskets_list = [(1,2,3), (1,2,4), (1,4,59), (1,3,59), (3,4,59)]
d = {ids: df.loc[df.id.isin(ids), ['price', 'weight']].sum() for ids in baskets_list}

Теперь у вас есть вся информация:

d[(1,2,3)]
#price      14.0000
#weight    488.1239
#dtype: float64

d[(1,3,59)]
#price      14.00000
#weight    400.59875
#dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...