Python groupby并选择mode并连接回原始数据帧
我有如下数据:Python groupby并选择mode并连接回原始数据帧,python,pandas,group-by,aggregate,mode,Python,Pandas,Group By,Aggregate,Mode,我有如下数据: df = pd.DataFrame({'Name' : ['John', 'John', 'John', 'Darrel','Darrel', 'Nick'], 'Ocupation' : ['An','An', 'An', 'Se', 'So', 'Ik'], 'Numbers' : ['12','12','54','2', '3', '55']}) 我想按名称分组,对于名称中的每个组,我想选择数字的模
df = pd.DataFrame({'Name' : ['John', 'John', 'John', 'Darrel','Darrel', 'Nick'],
'Ocupation' : ['An','An', 'An', 'Se', 'So', 'Ik'],
'Numbers' : ['12','12','54','2', '3', '55']})
我想按名称
分组,对于名称
中的每个组,我想选择数字
的模式(最频繁/最普遍的值)。我使用以下代码执行此操作:
df.groupby(['Name'])['Numbers'].agg(lambda x: pd.Series.mode(x)[0]).reset_index(False)
,现在我想将这些模式连接回df
。有什么方法可以一次完成吗
现在我要做的也许不是那么优雅:
df.merge(df.groupby(['Name'])['Numbers'].agg(lambda x: pd.Series.mode(x)[0]).reset_index(False),
left_on='Name', right_on='Name', how = 'left')
如果您需要模式,可以使用:
from statistics import mode
df['Mode'] = df.groupby(['Name'])['Numbers'].transform(mode)
使用groupby().transform()
代替groupby().agg()
:
输出:
Name Ocupation Numbers Mode
0 John An 12 12
1 John An 12 12
2 John An 54 12
3 Darrel Se 2 2
4 Darrel So 3 2
5 Nick Ik 55 55
很漂亮,我不知道
转换
,非常感谢!很漂亮,我不知道转换
,非常感谢!
Name Ocupation Numbers Mode
0 John An 12 12
1 John An 12 12
2 John An 54 12
3 Darrel Se 2 2
4 Darrel So 3 2
5 Nick Ik 55 55