python-3.x - 在 groupby 之后需要有关 agg 功能的帮助以进行最后的操作 - 首先

标签 python-3.x pandas dataframe pandas-groupby

我在 Pandas 数据框下面。

  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 应用到同一列“group”上,并希望应用聚合函数来获取(最后一个 - 首先)列“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

关于python-3.x - 在 groupby 之后需要有关 agg 功能的帮助以进行最后的操作 - 首先,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63039527/

相关文章:

python - Pandas 转换列表不一致的行为

r - 如何将表格转换为数据框

python - 找到抓取网站的正确元素

python-3.x - 使用 pytest、tornado 和 aiopg 进行单元测试失败,任何查询都失败

python - 将新列添加到可变长度的数据框中

sql - 左外加入 R 有条件

python - 根据行条件替换 nan 值

python - 类型错误: 'in <string>' 需要字符串作为左操作数,而不是列表(列表理解)

python-3.x - 分组并计算时间戳的差异

python - 如何制作用于电影评论数据集分类的数据框?