我有一个数据帧输出,如下所示,总是有数量可变的数字列,在这里表示为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

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

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

这会删除我所有的非数字列,我想要一些动态的东西.对于"hash column",我想要一些类似以下内容的输出:

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

现在我唯一能想到的方法是,分别 for each 唯一的列大小写执行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]

NB. you an also combine both!

输出:

                         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 pyramme

如何对行使用分段/部分.diff()或.pct_change()?

Pandas read_jsonfuture 警告:解析字符串时,to_datetime与单位的行为已被反对

"如果发生特定错误,返回值

无法导入已安装的模块

过载功能是否包含Support Int而不是Support Int?

使文本输入中的文本与标签中的文本相同

Python:在类对象内的字典中更改所有键的索引,而不是仅更改一个键

返回nxon矩阵的diag元素,而不使用for循环

Python多处理:当我在一个巨大的pandas数据框架上启动许多进程时,程序就会陷入困境

acme错误-Veritas错误:模块收件箱没有属性linear_util'

如何在Python中将returns.context. DeliverresContext与Deliverc函数一起使用?

如何列举Pandigital Prime Set

计算组中唯一值的数量

Streamlit应用程序中的Plotly条形图中未正确显示Y轴刻度

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

如何在Polars中从列表中的所有 struct 中 Select 字段?

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

try 检索blob名称列表时出现错误填充错误""

处理具有多个独立头的CSV文件