python - 处理pandas中的多列和groupby/agg(无需手动分配所有聚合函数)

标签 python pandas pandas-groupby

我有一个数据框输出,如下所示,并且始终具有可变数量的数字列,此处表示为 t1-t4。

hash         name group trial t1 t2 t3 t4
1AomKHNL56l  EP1  G01   clump 1  4   5   9
2oKA7J1B3GL  EP2  G02   green 2  10  0   24
zsfAu5Q6I60  EP1  G01   clump 4  3   1   3
v68fGHY8zx1  EP2  G02   green 1  5   9  22

我想要做的是将数据框分组到“组”类别中,并对我知道可以使用的所有数字列进行求和

df.groupby(["group"]).sum()

这会删除我所有的非数字列,并且我想要一些动态的东西。对于“哈希列”,我想要类似于以下输出的内容:

df.groupy(["group"]).agg("hash":list)

对于其他非数字列,我只想按原样维护它们,因为它们在唯一的组 ID 中都是相同的。所以最终的结果会是这样的:

hash                      name group trial t1 t2 t3 t4
[1AomKHNL56l,zsfAu5Q6I60] EP1  G01   clump 5  7   6   12
[2oKA7J1B3GL,v68fGHY8zx1] EP2  G02   green 3  15  9   46

现在我能想到的唯一方法包括分别为每个唯一的列情况执行 agg 和 sum 函数,然后在最后合并数据帧或在 agg 函数中键入每个列 id。我想知道是否有人知道一种方法可以在 groupby 函数中本地执行此操作,而无需所有额外的数据帧合并步骤或必须列出每个列 id 和要执行的操作。也许某种 lambda 语句?

哈希、名称、组和试验的列 ID 始终相同,但数字列始终具有不同的名称,具体取决于要查看哪些样本组以供引用。

最佳答案

您可以使用聚合函数的字典:

# default is sum
d = {c: 'sum' for c in df.columns}

# change a few other columns
d.update({'hash': list, 'name': 'first', 'group': 'first', 'trial': 'first'})

# aggregate
df.groupby('group', as_index=False).agg(d)

设置字典的替代选项:

d = {'first': ['name', 'group', 'trial'],
     'sum': ['t1', 't2', 't3', 't4'],
     list: ['hash']}

d = {k:v for v,l in d.items() for k in l}

df.groupby('group', as_index=False).agg(d)[df.columns]

注意。您还可以将两者结合起来!

输出:

                         hash name group  trial  t1  t2  t3  t4
0  [1AomKHNL56l, zsfAu5Q6I60]  EP1   G01  clump   5   7   6  12
1  [2oKA7J1B3GL, v68fGHY8zx1]  EP2   G02  green   3  15   9  46

关于python - 处理pandas中的多列和groupby/agg(无需手动分配所有聚合函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71860481/

相关文章:

Python:连接存储在字典中的数组

python - 有效循环 pandas 数据框

python - Groupby 多级索引中的时间仓

python - 带 ffill 的 GroupBy 删除组并且不将组放入索引

python - 创建一个单独的列,列出所有购买的列表,除了 python pandas 数据框中第一次出现的情况

python - 从 "asksaveasfilename"函数获取文件类型

python - Python- Pyramid 和matplotlib-SVG不能超过一个 View 输出吗?

python - 将参数传递给 Python subprocess.Popen

python - 查找每组的前 N ​​个值,2 亿行

python - 使用 Pandas 组合数据框中两行的不同部分