我在数据帧上名为“order_id”的列上使用 Python 的
value_counts(sort=False)
函数,但输出顺序与数据在数据帧中显示的顺序不同。
例如,当我执行
df['order_id'].value_counts(sort=False)
时,结果顺序与数据帧中的顺序不同(2398795,473747)等。
数据框如下所示:
最终目标是这样的:对于每个订单 ID,我想要该订单的 Product_ids 计数以及自上一个订单以来的 days_id。
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
似乎只有当 pandas 版本为 <1.3.0. For pandas >=1.3.0 时才会发生这种情况,
sort=False
将保留原始顺序。请参阅此处。因此,只需升级您的 pandas 即可解决此问题。
对于不想升级 pandas 的用户,解决方案可能是:
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
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