gpt4 book ai didi

python - 如何获取 groupby 的最大计数(最常见的项目)

转载 作者:行者123 更新时间:2023-12-02 01:24:11 24 4
gpt4 key购买 nike

我有一个数据框。我想按某些列上的行进行分组,然后形成一个计数列,然后获取最大计数并为其创建一个列并将其附加到数据帧。

我尝试过:

    df["max_pred"] = df.groupby(['fid','prefix','pred_text1'], 
sort=False)["pred_text1"].transform("max")

但是它列出了 pred_text1 的最大重复行,但我想要它的修复次数

例如:

A  B  C
a d b
a d b
a d b
a d a
a d a
b b c
b b c
b b d

如果我按 A 和 B 对行进行分组,然后对 C 进行计数并获取每个组的最大值并将其存储在新列 F 中,我期望:

A  B  F   E
a d 3 b
a d 3 b
a d 3 b
a d 3 b
a d 3 b
b b 2 c
b b 2 c
b b 2 c

E 显示最常见的项目,其频率在 F 中指定

最佳答案

您可以使用groupby.transformvalue_counts :

df['F'] = (df.groupby(['A', 'B'])['C']
.transform(lambda g: g.value_counts(sort=False).max())
)

变体 collections.Counter :

from collections import Counter

df['F'] = (df.groupby(['A', 'B'])['C']
.transform(lambda g: max(Counter(g).values()))
)

输出:

   A  B  C  F
0 a d b 3
1 a d b 3
2 a d b 3
3 a d a 3
4 a d a 3
5 b b c 2
6 b b c 2
7 b b d 2

更新

我会使用 merge这里:

cols = ['A', 'B']
out = df.merge(df[cols+['C']]
.value_counts().groupby(cols).head(1)
.reset_index(name='F').rename(columns={'C': 'E'})
)

输出:

   A  B  C  E  F
0 a d b b 3
1 a d b b 3
2 a d b b 3
3 a d a b 3
4 a d a b 3
5 b b c c 2
6 b b c c 2
7 b b d c 2

关于python - 如何获取 groupby 的最大计数(最常见的项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75192900/

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