我有这个数据框:
person_code type growth size ...
0 . 231 32 0.54 32
1 . 233 43 0.12 333
2 . 432 32 0.44 21
3 . 431 56 0.32 23
4 . 654 89 0.12 89
5 . 764 32 0.20 211
6 . 434 32 0.82 90
...
(这个dataframe比较大,我这里做了个简化)
我想为每种类型创建一个数据框,其中包含 3 个具有较高“增长”的人,并按它排序。我希望能够按类型调用它。在本例中,让我们使用类型 32,因此输出 df 应该如下所示:
person_code type growth size ...
6 . 434 32 0.82 90
0 . 231 32 0.54 32
2 . 432 32 0.44 21
...
我知道这将是使用 groupby 的东西:
groups=dataframe.groupby('type')
但是我如何调用类型为 32 的行的 groupby 对象呢? 如果仅将增长前三名区分开来,最好的办法是什么?
请您参考如下方法:
IIUC,你不需要 groupby,只需 query 过滤数据帧然后 nlargest :
df.query('type == 32').nlargest(3, 'growth')
并且,要参数化“类型”输入,您可以使用以下语法:
in_type = 32
df.query('type == @in_type').nlargest(3, 'growth')
输出:
person_code type growth size
6 . 434 32 0.82 90
0 . 231 32 0.54 32
2 . 432 32 0.44 21
或者如果你想使用 groupby,你可以使用查询来只获取你需要的类型。
type_group_df = df.groupby('type', group_keys=False)\
.apply(pd.DataFrame.nlargest,n=3,columns='growth')
要调用它,您可以使用:
type_group_df.query('type == 32')
如果你有一个字符串作为类型,它看起来像这样:
type_group_df.query('type == "brazilian"')
但是,如果万一您的列名称以特殊字符开头,例如“#”,您应该使用:
type_group_df[type_group_df['#type'] == 32]
输出:
person_code type growth size
6 . 434 32 0.82 90
0 . 231 32 0.54 32
2 . 432 32 0.44 21
查询另一种类型(43):
type_group_df.query('type == 43')
输出:
person_code type growth size
1 . 233 43 0.12 333
