gpt4 book ai didi

python - pandas:如何将 groupby 行的子集聚合成一行?

转载 作者:太空宇宙 更新时间:2023-11-04 00:53:31 25 4
gpt4 key购买 nike

如果输入以下内容,我将执行以下操作:

pd.DataFrame({'cat':['A','B','C','B','C','D','C','E'], 'value':[3,6,7,7,9,8,3,1]})

cat value
A 3
B 6
C 7
B 7
C 9
D 8
C 3
E 1
  1. cat 分组并降序排序:

    df.groupby('cat').sum().sort_values('value', ascending=False)

    cat sum
    C 19
    B 13
    D 8
    A 3
    E 1
  2. 将累积加起来小于 90% 的行保留原样,但剩余的行合并为一个新类别“其他”:

    cat    sum
    C 19
    B 13
    Other 12

我该怎么做最后一步?

最佳答案

result = df.groupby('cat').sum().sort_values('value', ascending=False)

result除以总和得到百分比:

In [139]: result.div(result.sum())
Out[139]:
value
cat
C 0.431818
B 0.295455
D 0.181818
A 0.068182
E 0.022727

取累计和:

In [140]: result.div(result.sum()).cumsum()
Out[140]:
value
cat
C 0.431818
B 0.727273
D 0.909091
A 0.977273
E 1.000000

并构建一个 bool 掩码,它在 cumsum 为 < 0.9 的地方为 True:

In [141]: result.div(result.sum()).cumsum() < 0.9
Out[141]:
value
cat
C True
B True
D False
A False
E 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 pd
df = 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)

产量

       value
cat
C 19
B 13
Other 12

关于python - pandas:如何将 groupby 行的子集聚合成一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36072244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com