我有一个数据框。我想按某些列上的行进行分组,然后形成一个计数列,然后获取最大计数并为其创建一个列并将其附加到数据帧。
我尝试过:
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.transform
与 value_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/