python - 是否可以在 Pandas 的 groupby 操作中应用`first()`和`last()`来分隔列?
问题描述
我有一个数据框:
df = pd.DataFrame({'id': [1, 1, 2, 2], 'data': [1, 2, 3, 4], 'value': [10, 9, 8, 7]})
In [4]: df
Out[4]:
id data value
0 1 1 10
1 1 2 9
2 2 3 8
3 2 4 7
In [5]: df.groupby(['id']).last()
Out[5]:
data value
id
1 2 9
2 4 7
In [6]: df.groupby(['id']).first()
Out[6]:
data value
id
1 1 10
2 3 8
是否可以从groupby
由first()
应用于value
和last()
应用于组成的数据框生成数据框data
?如果它更容易,您可以假设last()
它适用于除 之外的所有内容value
,并且first()
仅适用于value
. 我可以在两个单独的 groupbys 中完成,但可以在一个中完成吗?
解决方案
您可以将 funcs 的字典传递给agg
:
In[80]:
df.groupby('id').agg({'data':'last', 'value':['first','last']})
Out[80]:
data value
last first last
id
1 2 10 9
2 4 8 7
如果要调用first
,last
可以在“值”列上传递函数列表。这里pandas
可以通过仅传递函数的字符串名称来推断要调用的方法
推荐阅读
- r - 使用 from 和 to 字段将链拆分为 data.frame
- zalenium - Zalenium 视频存储在本地?
- javascript - 具有两个 API(路由)的 Express 应用程序有两个响应 1)错误 2)成功
- javascript - 查找重复的两个单词之间的序列 - javascript
- c++ - 连接失败时如何防止端口更改
- git - Git 无法更新带有致命标签的标签:标签“v0.0.8”已经存在
- css - FIORI 自定义主题被一些用户的 library.css 部分覆盖
- angularjs - 为什么angularjs在使用promise构造时会抛出“非法调用”?
- java - 有没有办法找到高于和低于平均水平的方法
- laravel - 如何使用laravel中的多个关系将记录保存在数据库中