这样很容易产生多级groupby结果
Max Speed
Animal Type
Falcon Captive 390.0
Wild 350.0
Parrot Captive 30.0
Wild 20.0
代码看起来像df.groupby(['animal', 'type'])['speed'].max()
但是,如果我想向每个子组添加一个总行,以产生类似这样的结果
Max Speed
Animal Type
Falcon Captive 390.0
Wild 350.0
overall 390.0
Parrot Captive 30.0
Wild 20.0
overall 30.0
我该怎么做?
之所以添加子级别行,是因为它可以让我在其他同事的BI工具中选择类别。
更新:在上面的示例中,我展示了使用 max()
,我还想知道如何使用 user_id.nunique()
来实现。
现在我通过 2 个 groupby 生成结果,然后将它们连接起来。像
df1 = df.groupby(['animal', 'type'])['speed'].max()
df2 = df.groupby(['animal'])['speed'].max()
##### ... manually add `overall` index to df_2
df_total = pd.concat([df1, df2]).sort_index()
但是好像有点太手动了,有没有更好的方法?
您可以使用 2 个 concat
来执行此操作,从您的 groupby
结果开始。
g = df.groupby(level=0).max()
m = pd.concat([g], keys=['overall'], names=['Type']).swaplevel(0, 1)
pd.concat([df, m], axis=0).sort_index(level=0)
Max Speed
Animal Type
Falcon Captive 390.0
Wild 350.0
overall 390.0
Parrot Captive 30.0
Wild 20.0
overall 30.0
我是一名优秀的程序员,十分优秀!