gpt4 book ai didi

python - Pandas 中分组字符串的累积和

转载 作者:行者123 更新时间:2023-12-04 03:31:40 24 4
gpt4 key购买 nike

我有一个 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://stackoverflow.com/a/39623235/5143841 https://stackoverflow.com/a/22651188/5143841

但我不能完全到达那里。

最佳答案

我的弗兰肯斯坦博士的答案

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]

关于python - Pandas 中分组字符串的累积和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66680988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com