鉴于以下输入,这是我想要做的:pd.DataFrame({'cat':['A','B','C','B','C','D','C','E'], 'value':[3,6,7,7,9,8,3,1]})cat valueA 3B 6C 7B 7C 9D 8C 3E 1 按 cat 分组并降序排序:df.groupby('cat').sum().sort_values('value', ascending=False)cat sumC 19B 13D 8A 3E 1 保留累积加起来小于 90% 的行,但其余行合并为一个新类别“其他”:cat sumC 19B 13Other 12 我怎么做最后一步? 最佳答案 让result = df.groupby('cat').sum().sort_values('value', ascending=False)将 result 除以总和以获得百分比:In [139]: result.div(result.sum())Out[139]: valuecatC 0.431818B 0.295455D 0.181818A 0.068182E 0.022727取累计和:In [140]: result.div(result.sum()).cumsum()Out[140]: valuecatC 0.431818B 0.727273D 0.909091A 0.977273E 1.000000并构建一个 bool 掩码,其中 cumsum In [141]: result.div(result.sum()).cumsum() < 0.9Out[141]: valuecatC TrueB TrueD FalseA FalseE False选择并求和非屏蔽行:row = result.loc[~mask].sum()row.name = 'Other'使用 result.loc[mask] 选择 True 行,并附加“Other”行:result = result.loc[mask]result = result.append(row)import pandas as pddf = pd.DataFrame({'cat':['A','B','C','B','C','D','C','E'], 'value':[3,6,7,7,9,8,3,1]})result = df.groupby('cat').sum().sort_values('value', ascending=False)mask = (result['value'].div(result['value'].sum()).cumsum() < 0.9)result = result.loc[mask].append(pd.Series(result.loc[~mask].sum(), name='Other'))print(result)产量 valuecatC 19B 13Other 12关于python - pandas:如何将 groupby 行的子集聚合为一行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36072244/