Pandas如何实现分组内每行与组内首行指定列的差值计算
错误原因
你遇到的报错是因为SeriesGroupBy对象本身不支持sub方法,且直接对分组对象调用iloc[0]无法获取每组的首个行值,需要先通过分组聚合拿到每组的首个B列值,再做差值计算。
正确实现
使用transform方法将每组首行的B列值广播到组内所有行,直接与原B列做减法即可:
# 若要确保取到的是组内索引最小的行的值,可先按索引升序排序 df = df.sort_index() df['D'] = df['B'] - df.groupby('A')['B'].transform('first')
运行结果
和你期望的输出完全一致:
A B C D 0 a 2 3 0 1 b 5 6 0 2 c 8 9 0 3 a 0 0 -2 4 a 8 7 6 5 c 2 1 -6
实现说明
groupby('A')['B'].transform('first')会对A列的每个分组取首个B列值,返回的Series长度和原DataFrame完全一致,每个位置对应所在分组的首个B值,直接相减即可快速得到目标差值列。
内容的提问来源于stack exchange,提问作者Amir Ghorbani
相关产品推荐
相关产品推荐

