You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas分组时使用first/last函数到列失败,实现方案遇语法错误求助

解决Pandas GroupBy聚合时的语法错误与First/Last值获取问题

我来帮你搞定这个问题!你遇到的「invalid syntax」语法错误,根源在于代码里的多余逗号——在tradePrice对应的聚合函数列表[np.max,lambda x: x.iloc[0]]后面多了一个逗号,导致Python解析字典时出错。

另外,其实Pandas已经内置了专门的first()和last()聚合函数,比手动写lambda x: x.iloc[0]更简洁、更贴合需求,还能自动处理分组内的空值情况,建议优先使用。

修正后的代码方案

方案1:修复语法错误(保留lambda写法)

把多余的逗号删掉即可:

import pandas as pd
import numpy as np

groups = df[df['isTrade'] == 1].groupby('dateTime_s')
print(groups.agg({
    'Volume': np.sum,
    'tradePrice': [np.max, lambda x: x.iloc[0]]  # 去掉了这里的多余逗号
}).head(160))

方案2:使用Pandas内置的first/last函数(更推荐)

用pd.Series.first()和pd.Series.last()替代lambda,代码可读性更高:

import pandas as pd
import numpy as np

groups = df[df['isTrade'] == 1].groupby('dateTime_s')
print(groups.agg({
    'Volume': np.sum,
    'tradePrice': [np.max, 'first', 'last']  # 直接用内置的'first'/'last'字符串别名
}).head(160))

这里的'first'和'last'是Pandas聚合函数的字符串别名,和调用pd.Series.first()效果完全一致,写法更简洁。

额外说明

如果你的分组后的数据顺序很重要(比如需要保证first是分组内的第一条原始数据),记得先确认dateTime_s分组后的数据是否保持了你需要的顺序——如果需要按特定列排序,可以在分组前先排序:

# 先按dateTime_s和你需要的排序键排序,再分组
sorted_df = df[df['isTrade'] == 1].sort_values(['dateTime_s', 'your_sort_column'])
groups = sorted_df.groupby('dateTime_s')

内容的提问来源于stack exchange,提问作者Giladbi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:26:58