groupby 和 select 模式并加入原始数据帧
groupby and select mode and join back onto original dataframe
我有这样的数据:
df = pd.DataFrame({'Name' : ['John', 'John', 'John', 'Darrel','Darrel', 'Nick'],
'Ocupation' : ['An','An', 'An', 'Se', 'So', 'Ik'],
'Numbers' : ['12','12','54','2', '3', '55']})
我想按 Name
分组,对于 Name
中的每个组,我想 select Numbers
的模式(最大 frequent/prevalent 值) .我使用以下代码执行此操作:
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()
:
df['Mode'] = df.groupby('Name')['Numbers'].transform(lambda x: x.mode()[0])
输出:
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
我有这样的数据:
df = pd.DataFrame({'Name' : ['John', 'John', 'John', 'Darrel','Darrel', 'Nick'],
'Ocupation' : ['An','An', 'An', 'Se', 'So', 'Ik'],
'Numbers' : ['12','12','54','2', '3', '55']})
我想按 Name
分组,对于 Name
中的每个组,我想 select Numbers
的模式(最大 frequent/prevalent 值) .我使用以下代码执行此操作:
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()
:
df['Mode'] = df.groupby('Name')['Numbers'].transform(lambda x: x.mode()[0])
输出:
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