Python 我是否可以使用groupby创建列,其中每一行都是Pandas数据帧中的运行列表?

Python 我是否可以使用groupby创建列,其中每一行都是Pandas数据帧中的运行列表?,python,pandas,list,data-science,aggregation,Python,Pandas,List,Data Science,Aggregation,假设我有一个熊猫数据帧: # create df df = pd.DataFrame({'id': [1,1,1,2,2,2], 'val': [5,4,6,3,2,3]}) 假设它是按“id”和一个虚构的、未显示的日期列(升序)排序的。 我想创建另一列,其中每一行都是该日期的“val”列表 结束数据帧将如下所示: df = pd.DataFrame({'id': [1,1,1,2,2,2], 'val': [5,4,

假设我有一个熊猫数据帧:

# create df
df = pd.DataFrame({'id': [1,1,1,2,2,2],
                   'val': [5,4,6,3,2,3]})
假设它是按“id”和一个虚构的、未显示的日期列(升序)排序的。 我想创建另一列,其中每一行都是该日期的“val”列表

结束数据帧将如下所示:

df = pd.DataFrame({'id': [1,1,1,2,2,2],
                   'val': [5,4,6,3,2,3],
                   'val_list': [[5],[5,4],[5,4,6],[3],[3,2],[3,2,3]]})

df['val_list'] = df.groupby('id')['val'].apply(lambda x: x.runlist())
我不想使用循环,因为我使用的实际df有大约400万条记录。我想象着我会将lambda函数与groupby结合使用(类似于这样):

这会引发AttributeError,因为runlist()方法不存在,但我认为解决方案应该是这样的

有人知道如何解决这个问题吗?

让我们试试

df['new'] = df.val.map(lambda x : [x]).groupby(df.id).apply(lambda x : x.cumsum())
Out[138]: 
0          [5]
1       [5, 4]
2    [5, 4, 6]
3          [3]
4       [3, 2]
5    [3, 2, 3]
Name: val, dtype: object

你能解释一下这一点吗?“我想创建另一列,其中每行都是该日期的‘val’列表”这些val是如何在每个日期定义的?为简单起见,我没有包括“日期”列。我在我的帖子中提到,它们是按未显示的日期列升序排列的。每个日期保留特定id的前一日期的VAL?是,每天保留前一天和当前一天的VAL。您能解释一下为什么最终结果只有6行,即使只有2组吗?@recentadvances您可以使用什么是
cumsum
~,它将返回有意义的累计总和~谢谢。我还注意到,如果在
groupby
之后直接使用
cumsum
方法,则这不起作用,您需要在
apply
中使用它。知道为什么吗?@recentadvances对象的常见错误