Pandas 值计数而不对结果进行排序

问题描述 投票:0回答:2

我在数据帧上名为“order_id”的列上使用 Python 的

value_counts(sort=False)
函数,但输出顺序与数据在数据帧中显示的顺序不同。

例如,当我执行

df['order_id'].value_counts(sort=False)
时,结果顺序与数据帧中的顺序不同(2398795,473747)等。

数据框如下所示:

enter image description here

最终目标是这样的:对于每个订单 ID,我想要该订单的 Product_ids 计数以及自上一个订单以来的 days_id。

python pandas count
2个回答
1
投票

IIUC,使用

groupby
agg

df.groupby('order_id', sort=False)\
  .agg({'product_id': 'size','days_since_prior_order': 'sum'})

输出:

          product_id  days_since_prior_order
order_id                                    
2398795            6                    90.0
473747             5                   105.0
2254736            5                   145.0
431534             2                    56.0

0
投票

似乎只有当 pandas 版本为 <1.3.0. For pandas >=1.3.0 时才会发生这种情况,

sort=False
将保留原始顺序。请参阅此处。因此,只需升级您的 pandas 即可解决此问题。

对于不想升级 pandas 的用户,解决方案可能是:

  1. 使用
    reindex
df['order_id'].value_counts(sort=False).reindex(df['order_id'].unique()) # `sort=False` can be omitted here

# 2398795    6
# 473747     5
# 2254736    5
# 431534     8
# 3367565    2
# Name: order_id, dtype: int64
  1. 使用
    groupby
df.groupby(['order_id'], sort=False)['order_id'].count()

# order_id
# 2398795    6
# 473747     5
# 2254736    5
# 431534     8
# 3367565    2
# Name: order_id, dtype: int64
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.