3 回答
TA贡献1784条经验 获得超2个赞
更新
必须很难克服这一点(在示例daraframe上比任何建议的pandas解决方案快10倍,比建议的numpy解决方案快1.5倍)。要点是要远离大熊猫并使用itertools.groupby它,因为它涉及非数值数据时,做得更好。
from itertools import groupby
from collections import Counter
pd.Series({x: Counter(z[-1] for z in y).most_common(1)[0][0] for x,y
in groupby(sorted(df.values.tolist()),
key=lambda x: x[0])})
# Jerry Black
# John White
# Tom Blue
旧答案
这是另一种方法。它实际上比原始版本慢,但我将其保留在此处:
data.groupby('name')['color']\
.apply(pd.Series.value_counts)\
.unstack().idxmax(axis=1)
# name
# Jerry Black
# John White
# Tom Blue
TA贡献1998条经验 获得超6个赞
解决方案来自 pd.Series.mode
df.groupby('name').color.apply(pd.Series.mode).reset_index(level=1,drop=True)
Out[281]:
name
Jerry Black
John White
Tom Blue
Name: color, dtype: object
添加回答
举报