Aar*_*and 4 python list aggregation pandas data-science
想象一下,我有一个 Pandas DataFrame:
# create df
df = pd.DataFrame({'id': [1,1,1,2,2,2],
'val': [5,4,6,3,2,3]})
Run Code Online (Sandbox Code Playgroud)
让我们假设它是按“id”和一个虚构的、未显示的日期列(升序)排序的。我想创建另一列,其中每一行都是该日期的“val”列表。
结束的 DataFrame 将如下所示:
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]]})
Run Code Online (Sandbox Code Playgroud)
我不想使用循环,因为我正在使用的实际 df 大约有 400 万条记录。我想象我会使用 lambda 函数与 groupby 结合使用(类似这样):
df['val_list'] = df.groupby('id')['val'].apply(lambda x: x.runlist())
Run Code Online (Sandbox Code Playgroud)
这引发了一个 AttributError 因为 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
Run Code Online (Sandbox Code Playgroud)