df = pd.DataFrame({'type':['a', 'a', 'b', 'b'], 'id':[1134, 5321, 2444, 2444], 'amt':[45, 55, 13, 14]})
我正在尝试获取amt列的count、sum、mean和惟一id。
df.groupby('type')['amt'].agg(['count', 'sum', np.mean]) count sum mean type a 2 100 50.0 b 2 27 13.5
现在我正在尝试为每个分组获取不同的id。如果我加上 id 把柱子拉出来
id
id amt count sum mean count sum mean type a 2 6455 3227.5 2 100 50.0 b 2 4888 2444.0 2 27 13.5
我不想要。我要第一张桌子,但要有明显的数字 另一个 列。我也试过下面的方法,但没有用。
df.groupby('type')['amt'].agg(['count', 'sum', np.mean, lambda x: len(np.unique(x['id']))])
count sum mean unique_id type a 2 100 50.0 2 b 2 27 13.5 1
agg 具有 nunique . 您不必将列表传递给 阿格 ,它还需要一个字典映射,这是这里所需要的。
agg
nunique
阿格
res = df.groupby('type').agg({'amt': ['count', 'sum', 'mean'], 'id': 'nunique'})
amt id count sum mean nunique type a 2 100 50.0 2 b 2 27 13.5 1
如果您想将列展平(我个人认为您应该保留它们,这样更易于索引):
res.columns = res.columns.get_level_values(1) print(res)
count sum mean nunique type a 2 100 50.0 2 b 2 27 13.5 1