假设我们有一个pandas数据框…
item MRP sold0 A 10 101 A 36 42 B 32 63 A 26 74 B 30 9
然后执行groupby('item').mean()
它会变成
item MRP sold0 A 24 71 B 31 7.5
是否有办法保留所有唯一项目的MRP均值,并在取消分组时创建一个包含这些值的新列。
基本上我想要的是
item MRP sold Mean_MRP0 A 10 10 241 A 36 4 242 B 32 6 313 A 26 7 244 B 30 9 31
项目很多,所以我需要一个更快和优化的方法来做到这一点
回答:
使用Transform函数:
df = (df .assign(Mean_MRP = lambda x:x.groupby('item')['MRP'] .transform('mean')))df item MRP sold Mean_MRP0 A 10 10 241 A 36 4 242 B 32 6 313 A 26 7 244 B 30 9 31
你也可以使用pyjanitor模块,这样代码会更简洁:
import janitordf.groupby_agg(by='item', agg='mean', agg_column_name="MRP", new_column_name='Mean_MRP')