Pandas 中分组字符串的累积和
Posted
技术标签:
【中文标题】Pandas 中分组字符串的累积和【英文标题】:Cumulative Sum of Grouped Strings in Pandas 【发布时间】:2021-06-15 06:10:47 【问题描述】:我有一个 pandas 数据框,我想按两列分组,然后将第三列字符串的累积总和作为其中一个组中的列表返回。
例子:
Year Bucket Name
2000 1 A
2001 1 B
2003 1 C
2000 2 B
2002 2 C
我想要的输出是:
Year Bucket Cum_Sum
2000 1 [A]
2001 1 [A,B]
2002 1 [A,B]
2003 1 [A,B,C]
2000 2 [B]
2001 2 [B]
2002 2 [B,C]
2003 2 [B,C]
我试图从两个响应中拼凑出一个答案: https://***.com/a/39623235/5143841 https://***.com/a/22651188/5143841
但我不能完全到达那里。
【问题讨论】:
【参考方案1】:我的弗兰肯斯坦博士回答
dat = []
rng = range(df.Year.min(), df.Year.max() + 1)
for b, d in df.groupby('Bucket'):
for y in rng:
dat.append([y, b, [*d.Name[d.Year <= y]]])
pd.DataFrame(dat, columns=[*df])
Year Bucket Name
0 2000 1 [A]
1 2001 1 [A, B]
2 2002 1 [A, B]
3 2003 1 [A, B, C]
4 2000 2 [B]
5 2001 2 [B]
6 2002 2 [B, C]
7 2003 2 [B, C]
另一个奇怪的答案
rng = range(df.Year.min(), df.Year.max() + 1)
i = [(y, b) for b, d in df.groupby('Bucket') for y in rng]
s = df.set_index(['Year', 'Bucket']).Name.map(lambda x: [x])
s.reindex(i, fill_value=[]).groupby(level=1).apply(pd.Series.cumsum).reset_index()
Year Bucket Name
0 2000 1 [A]
1 2001 1 [A, B]
2 2002 1 [A, B]
3 2003 1 [A, B, C]
4 2000 2 [B]
5 2001 2 [B]
6 2002 2 [B, C]
7 2003 2 [B, C]
【讨论】:
谢谢,我不介意《科学怪人》!请注意,在我的原始帖子中,我不必要地要求将不平衡面板作为输出(即,桶 1 到 2003 年,桶 2 到 2002 年)。我现在编辑了!以上是关于Pandas 中分组字符串的累积和的主要内容,如果未能解决你的问题,请参考以下文章