如何对Pandas DataFrame按Num分组统计首尾值及最值?
问题:Pandas分组获取首尾值及最值统计
现有如下Pandas DataFrame:
import pandas as pd data = [ [1, 188], [1, 258], [1, 386], [1, 385], [1, 386], [2, 111], [2, 253], [2, 812], [3, 936], [3, 121], [3, 273], [3, 554], ] df = pd.DataFrame(data, columns=['Num', 'Val']) print(df)
需要按Num分组,生成包含以下统计值的新DataFrame:
- Val First:分组中Val的首个值
- Val Last:分组中Val的最后一个值
- Val Min:分组中Val的最小值
- Val Max:分组中Val的最大值
期望输出如下:
df_new = pd.DataFrame({ 'Num': [1, 2, 3], 'Val First': [188, 111, 936], 'Val Last': [386, 812, 554], 'Val Min': [188, 111, 121], 'Val Max': [386, 812, 936] }) df_new.columns = ["Num", "Val First", "Val Last", "Val Min", "Val Max"] print(df_new)
目前已通过以下代码实现最值统计,但无法获取分组的首尾值:
df_new = df.groupby('Num').agg({'Val': ['min', 'max']})
解决方案
可以直接在agg方法中添加first和last来获取分组的首尾值,之后调整列名并重置索引即可匹配期望格式:
# 分组聚合,一次性获取首尾值及最值 df_new = df.groupby('Num')['Val'].agg(['first', 'last', 'min', 'max']) # 重命名列名 df_new.columns = ['Val First', 'Val Last', 'Val Min', 'Val Max'] # 将Num从索引转为普通列 df_new = df_new.reset_index() print(df_new)
执行后即可得到与期望一致的结果。
内容的提问来源于stack exchange,提问作者Djoe
相关产品推荐
相关产品推荐

