如何在 Python 中的 Pandas 数据帧上使用 groupby 创建多个列表聚合?

彼得

以以下示例熊猫数据帧:

df = pd.DataFrame({"id": [1, 2, 3, 4, 5, 6],
                   "start": ["jan1", "jan1", "jan4", "feb17", "jan4", "mar3"],
                   "end": ["jan3", "jan3", "jan21", "feb17", "jan21", "mar4"],
                   "duration": [2, 2, 17, 0, 17, 1],
                   "case_id": ["case1", "case43", "case6", "case1", "case22", "case69"]
                  })

我想在 columns 上使用 pandas groupby 操作startendduration在数据帧上执行两个列表聚合:

  • id每个组列表
  • case_id每个组列表

我想要的输出如下所示:

start    end    duration    ids    cases
jan1     jan3   2           [1, 2] [case1, case43]
jan4     jan21  17          [3, 5] [case6, case22]
feb17    feb17  0           [4]    [case1]
mar3     mar4   1           [6]    [case69]

如何使用 Pandas groupby 有效地做到这一点?

我知道如果我只需要一个聚合,我可以这样做:

df = df.groupby(['start', 'end', 'duration'])['id'].apply(list).to_frame()

如何为多个列表聚合执行此操作?如果有多种选择,最耗时的是什么?(我正在转换的 DataFrame 非常大)

索福克勒斯

您将需要使用pandas.groupby.agg,并指定要作为 返回的列list

为了减少所需的时间,因为您的数据中有分类列,请确保observed=True在 groupby 命令中使用该选项。这确保它只创建存在条目的行(有关此的更多信息here

res = df.groupby(['start', 'end', 'duration'],observed=True)[['id','case_id']].agg(list).reset_index().sort_values(by='id')

输出

res
Out[164]: 
   start    end  duration      id          case_id
1   jan1   jan3         2  [1, 2]  [case1, case43]
2   jan4  jan21        17  [3, 5]  [case6, case22]
0  feb17  feb17         0     [4]          [case1]
3   mar3   mar4         1     [6]         [case69]

假设您的唯一类别不是太多并且您的数据集不是太大,这应该不是问题。通常,处理字符串比处理数字需要更长的时间,因此如果运行时间太长,您可以尝试将object转换为数字列并重新执行groupby.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我如何在 Python 中的数据帧上使用 groupby 函数

如何在另一个数据帧 python pandas 中的多列上使用条件逻辑在数据帧中创建一列?

Python Pandas如何将groupby操作结果分配回父数据帧中的列?

如何在Python Pandas中使用groupby()。apply()而不是在整个数据集上运行循环?

使用Pandas GroupBy从多个列中聚合唯一值

如何在数据帧单元中拆分数据并在拆分时执行Pandas groupby?

如何在 Python 中为 Pandas 单独的数据帧读取多个文件

如何在python中的groupby中向聚合添加函数?

如何使用python从不同大小的列表中附加pandas数据帧?

如何在 Databricks 上的 Apache Spark 中从 str 输出创建 Spark 或 Pandas 数据帧

如何在 Pandas 数据框中获取按 groupby 组合的行的值列表?

Pandas groupby,如何在多个列上进行多个聚合?

如何使用groupby连接python pandas中的字符串?

如何在数据帧的每一行上运行函数,同时使用该数据帧中的多个参数,并在列表中输出新数据帧

如何在单个列上使用groupby并在Pandas中对多个列执行比较?

如何在python中使用selenium将表刮到pandas数据帧中?

如何使用Python的Pandas从多个列中创建一个列表?

如何使用groupby执行引用数据帧中数据子集上一行的功能

如何在pandas数据帧上使用来自phonenumbers Python库的解析?

如何在python中使用pandas和streamlit替换数据帧上的值?

如何在创建多个新列的 pandas.core.groupby.GroupBy 函数上运行单个聚合函数

如何在 pandas/python 中创建数据框类

如何在Python和Pandas中使用for循环创建许多过滤的数据帧?

在Python中的熊猫数据帧上从groupby选择索引值

Python:将数据帧中的行分组并使用pandas groupby选择分组中的abs最大值

如何在 pandas python 中创建多个标题?

如何在 Python Pandas 中合并来自不同数据帧的列表数据类型的单元格?

如何使用Pandas groupby()将带有逗号分隔的列的字符串聚合到列表中?

如何在 Python 中使用 groupby 删除列表中的重复项?