我可以使用 groupby 创建列,其中每一行都是 Pandas 数据框中的 运行 列表吗?
Can I create column where each row is a running list in a Pandas data frame using groupby?
假设我有一个 Pandas DataFrame:
# create df
df = pd.DataFrame({'id': [1,1,1,2,2,2],
'val': [5,4,6,3,2,3]})
让我们假设它是按 '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]]})
我不想使用循环,因为我正在使用的实际 df 有大约 400 万条记录。我想我会结合 groupby 使用 lambda 函数(像这样):
df['val_list'] = df.groupby('id')['val'].apply(lambda x: x.runlist())
这会引发 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
假设我有一个 Pandas DataFrame:
# create df
df = pd.DataFrame({'id': [1,1,1,2,2,2],
'val': [5,4,6,3,2,3]})
让我们假设它是按 '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]]})
我不想使用循环,因为我正在使用的实际 df 有大约 400 万条记录。我想我会结合 groupby 使用 lambda 函数(像这样):
df['val_list'] = df.groupby('id')['val'].apply(lambda x: x.runlist())
这会引发 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