You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中统计不区分顺序的唯一状态组合数量?

解决方案

要让draft,redraft和redraft,draft被视为同一状态组合,只需在生成每个id的状态组合前先对状态列表排序,这样不管原始顺序如何,排序后的组合都会一致。

修改后的代码如下:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'id': ['a', 'a', 'b', 'b', 'c', 'c', 'd', 'd'],
    'status': ['approved', 'approved', 'draft', 'redraft', 'redraft', 'draft', 'approved', 'draft']
})

# 对每个id的status排序后生成有序组合
df1 = df.groupby('id')['status'].apply(lambda x: tuple(sorted(x))).rename('status_combo')
df2 = df1.groupby(df1).size().reset_index(name='id_count')

# 可选:将tuple转为逗号分隔的字符串,匹配期望输出格式
df2['status_combo'] = df2['status_combo'].apply(lambda x: ','.join(x))

print(df2)

运行结果:

status_combo  id_count
0  approved,approved         1
1    approved,draft         1
2      draft,redraft         2

关键说明:

  • 原代码直接将状态转为tuple会保留原始顺序,加入sorted(x)后,每个id的状态列表会按字母顺序排序,确保不同顺序的相同状态组合被归为一类。
  • 最后一步的','.join(x)是为了将tuple格式的组合转为字符串,和你期望的输出格式完全一致,如果不需要字符串格式,可以跳过这一步。

内容的提问来源于stack exchange,提问作者kkkkkk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:54:32