python-3.x - 在 groupby 之后需要关于 agg 函数的帮助,以便最后进行操作 - 首先
问题描述
我低于熊猫数据框。
group A B C D E
0 g1 12 14 26 68 83
1 g1 56 58 67 34 97
2 g1 47 87 23 87 90
3 g2 43 76 98 32 78
4 g2 32 56 36 87 65
5 g2 54 12 24 45 95
我希望使用“组”列在同一列上应用 groupby,并希望应用聚合函数来获取(最后 - 第一个)列“E”。
预期输出:
group A B C D E
0 g1 12 87 116 34 7
1 g2 43 12 158 32 17
我写了下面的代码。但它不起作用。
import pandas as pd
df = pd.DataFrame([["g1", 12, 14, 26, 68, 83], ["g1", 56, 58, 67, 34, 97], ["g1", 47, 87, 23, 87, 90], ["g2", 43, 76, 98, 32, 78], ["g2", 32, 56, 36, 87, 65], ["g2", 54, 12, 24, 45, 95]], columns=["group", "A", "B", "C", "D", "E"])
ndf = df.groupby(["group"], as_index=False).agg({"A": 'first', "B": 'last', "C": 'sum', "D": 'min', "E": 'last - first'})
print(df)
print(ndf)
解决方案
lambda
您可以为此使用函数。
ndf = (
df.groupby(["group"], as_index=False)
.agg({"A": 'first',
"B": 'last',
"C": 'sum',
"D": 'min',
"E": lambda x: x.iat[-1]-x.iat[0]})
)
将输出
group A B C D E
0 g1 12 87 116 34 7
1 g2 43 12 158 32 17
推荐阅读
- c++ - 解决产生无限循环的数组问题时遇到问题
- emacs - Emacs Diary 的 diary-float 查询
- sql - SQL Group By 和更改分组值
- c# - 复选框中的 asp-for 在 asp.net 核心中抛出和错误
- php - 如何在php中将新数组值添加到标头
- java - Jmeter JavaSampler - 我们可以传递已经在 Jmeter WDS 中创建的 WebDriver 实例吗?
- angular - Angular 与 CodeIgniter
- ibm-cloud - 如何将 IBM Cloud Functions 与 App ID 集成以进行身份验证?
- python - 如何在 virtualenv 中强制安装包?
- sql-server - 将 varchar 值“2018-01-01”转换为数据类型 int 时转换失败