如何按time列取值将groupby筛选出的target元素拆分为独立列表
实现方法
你只需要在原有逻辑的基础上,对筛选排序后的结果再按time字段分组,将同time的target聚合成列表即可,修改后的完整代码如下:
import numpy as np import pandas as pd data=[[1,1,2,2,'A'], [2,5,5,1,'A'], [3,7,9,4,'B'], [1,5,1,9,'B'], [1,8,2,8,'C'], [2,8,5,10,'C'], [0,1,2,3,'D'], [1,1,1,2,'E'] , [0,1,1,5,'F']] df=pd.DataFrame(data, columns=['time','x','y','target','categ']) # 原有筛选逻辑后新增按time分组聚合的步骤 res_target = df.loc[df.groupby('categ')['time'].transform('max').eq(df['time']), ['time', 'target']]\ .sort_values('time')\ .groupby('time', sort=False)['target']\ .apply(list)\ .tolist() print(res_target)
运行后输出即为你需要的[[3, 5], [2], [1, 10], [4]]。
修改说明
- 原有逻辑已经完成了「筛选每个categ分组time最大值对应行、按time排序」的步骤,只需要补充后续分组聚合操作即可
- 新增的
groupby('time', sort=False)会按time值拆分数据,sort=False保留了之前按time排序的结果,避免分组顺序错乱 apply(list)会把每个time分组下的所有target值合并为一个子列表,最后调用tolist()就得到嵌套的目标结构
内容的提问来源于stack exchange,提问作者ccod929 ccod929
相关产品推荐
相关产品推荐

