如何用Pandas GroupBy生成当前至组尾的Value值列表新列?
用Pandas GroupBy实现分组内从当前行到末尾的Value列表
当然可以实现,核心思路是按ID和Name分组后,为每个分组的Value列生成从当前行到分组最后一行的切片列表。
1. 构造示例数据
先还原你的输入DataFrame:
import pandas as pd data = { 'ID': [1, 1, 1, 1, 1, 1, 2, 2], 'Name': ['John', 'John', 'John', 'John', 'Adam', 'Adam', 'Jen', 'Jen'], 'Value': [1, 4, 10, 50, 6, 3, 9, 6] } df = pd.DataFrame(data)
2. 实现分组生成列表的逻辑
定义自定义函数,对每个分组的Value序列,遍历每个位置并截取从当前位置到末尾的切片,再转为列表;最后用explode将嵌套的列表展开匹配到每一行:
def generate_trailing_values(series): # 遍历每个索引位置,截取从当前到末尾的切片并转列表 return [series.iloc[i:].tolist() for i in range(len(series))] # 按ID和Name分组,应用函数后展开结果 df['NewCol'] = df.groupby(['ID', 'Name'])['Value'].apply(generate_trailing_values).explode()
3. 验证结果
执行后得到的DataFrame与你期望的完全一致:
| ID | Name | Value | NewCol |
|---|---|---|---|
| 1 | John | 1 | [1, 4, 10, 50] |
| 1 | John | 4 | [4, 10, 50] |
| 1 | John | 10 | [10, 50] |
| 1 | John | 50 | [50] |
| 1 | Adam | 6 | [6, 3] |
| 1 | Adam | 3 | [3] |
| 2 | Jen | 9 | [9, 6] |
| 2 | Jen | 6 | [6] |
内容的提问来源于stack exchange,提问作者adama
相关产品推荐
相关产品推荐

