Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python groupby并选择mode并连接回原始数据帧_Python_Pandas_Group By_Aggregate_Mode - Fatal编程技术网

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