python - 到目前为止,按同一组中的聚合元素分组 - Pandas
问题描述
以下是输出应如何显示的示例:
数据框:具有所需输出的 df
class_id item req_output
a 1 [1]
a 2 [1,2]
a 3 [1,2,3]
b 1 [1]
b 2 [1,2]
我试过了:
df.groupby("class").apply(lambda x: list(x["item"])
class_id output
a [1,2,3]
b [1,2]
但这只会给出整个聚合,但是考虑到类,我需要在每一行中进行聚合
解决方案
首先,将每个元素放入大小为 1 的列表中。在这里,我们(利用滥用?)事实[1] + [2] = [1, 2]
。然后按 和 分组。GroupBy.apply
Series.cumsum
df["req_output"] = (
df["item"]
.map(lambda x: [x])
.groupby(df["class_id"])
.apply(lambda x: x.cumsum())
)
class_id item req_output
0 a 1 [1]
1 a 2 [1, 2]
2 a 3 [1, 2, 3]
3 b 1 [1]
4 b 2 [1, 2]
或者我们可以创建一个函数来返回所需的列表并使用GroupBy.transform
.
def get_slices(s):
"""
>>> get_slices( pd.Series([1, 2, 3]) )
[[1], [1, 2], [1, 2, 3]]
"""
lst = s.tolist()
return [lst[:i] for i in range(1, len(lst)+1)]
df['req_output'] = df.groupby('class_id')['item'].transform(get_slices)
推荐阅读
- javascript - 为什么使用排序功能时正数会导致元素不切换?
- c - 我的 URI Online Judge 中问题 1021(初学者)的代码有什么问题?
- c# - SignalR Core 中缺少 ConnectionSlow、Reconnecting 和 StateChanged 事件的解决方法?
- python - 在python中的文件目录上运行UNIX命令时如何修复“'bool'对象不可迭代”错误
- node.js - CURL 发送的发布请求被正确解析,但是当从邮递员发送时,我得到未定义的数据
- php - 在 Woocommerce 中基于时间启用/禁用添加到购物车
- python - 检查数据库中是否已存在用户名(Python + Pymongo)
- heroku - 来自印度的 Heroku 可用的付款方式,信用卡和贝宝除外
- django - Django 使用“super”在基本模板中导入随机列表时出现问题。我的解决方法是什么?
- html - 为什么我的列表和列表项与@page 定义的边距重叠?