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

Pandas中对应R dplyr::first/last分组后子数据集首尾值的实现

Pandas中实现dplyr::first/last的等价功能

当然有,Pandas里可以通过分组后结合transform方法实现和R语言dplyr包中dplyr::first/dplyr::last完全一致的效果——也就是分组后将每组的首/尾元素广播填充到该组的所有行,这和单纯用head(1)只取每组第一行的行为完全不同。

对应R示例的实现代码

首先构造和R示例一致的DataFrame:

import pandas as pd

df = pd.DataFrame({
    'value': range(2, 11, 2),
    'id': ['R', 'R', 'C', 'R', 'C']
})

实现dplyr::first的效果

# 给每个分组添加首元素列
df['first_of_subdf'] = df.groupby('id')['value'].transform('first')

执行后得到的结果和R示例完全一致:

valueidfirst_of_subdf
2R2
4R2
6C6
8R2
10C6

实现dplyr::last的效果

同理,要添加每组的尾元素列,只需把'first'换成'last':

# 给每个分组添加尾元素列
df['last_of_subdf'] = df.groupby('id')['value'].transform('last')

执行后结果:

valueidfirst_of_subdflast_of_subdf
2R28
4R28
6C610
8R28
10C610

补充说明

  • transform('first')本质是对每个分组执行取首元素的操作,然后将结果广播到该组的所有行,这和R中group_by + mutate + first的逻辑完全匹配。
  • 也可以用lambda表达式实现等价效果:transform(lambda x: x.iloc[0]),但直接使用字符串'first'/'last'的写法更简洁且性能更优。

内容的提问来源于stack exchange,提问作者Fernando Rocha Urbano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:02:25