【问题标题】:Specific aggregation of pandas dataframepandas dataframe 的具体聚合
【发布时间】:2019-05-20 15:43:08
【问题描述】:

我有一个带有“重量”、“价格”和“ID”等列的熊猫数据框。我的用户正在购买几个具有不同 ID 的商品。我想统计整个用户的购物篮/订单,例如总重量和总价格。 准确地说,我有一个 DataFrame df,以及带有 id 的篮子列表,例如:

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)
]

我想通过这个篮子列表聚合这个数据框(在篮子里我有物品的 id 列表)。希望有人可以帮助我进行此聚合。

【问题讨论】:

  • 最直接的方法是创建人员数据框 - 您可以在其中创建人员索引,其中包含产品 id 列。然后对 id 上的产品表进行左连接。从那里你可以按人等分组。
  • @Chinny84 不错的方法,谢谢您的帮助。一个问题,它会在内存中创建这个产品表,这会很重
  • 上一期我不太明白。似乎最简单的只是一个字典理解,循环通过你的baskets_list,子集并将聚合结果存储在字典中。

标签: python pandas pandas-groupby


【解决方案1】:

使用 dict 理解来执行每个聚合,使用 .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

【讨论】:

    猜你喜欢
    • 2021-04-14
    • 2018-04-16
    • 2020-01-28
    • 2021-04-06
    • 2021-07-28
    • 2016-06-24
    • 2021-04-06
    • 2014-06-28
    相关资源
    最近更新 更多