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

标签 python pandas dataframe group-by max

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

我尝试过:

    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/

相关文章:

Python 数据帧 : how can I return the number of occurrences in a column?

python - 从集合弃用中获取随机数

python - 将项目添加到 pandas.Series?

python - 将字典元组转换为数据框python

python - Pandas 向前填充破坏顺序的列部分

python - 总持续时间(不重复计算)-Python-Pandas

python - Pandas:使用索引中包含的列名时出现 KeyError

python - 模块 'fft' 中无名称 'scipy'

Python Pandas : update dataframe values from another dataframe

python - 使用列中的部分字符串来计算和填充 Pandas 数据框中的另一列