gpt4 book ai didi

python - 比较 pandas groupby 中的最后一个值

转载 作者:行者123 更新时间:2023-12-01 01:08:43 25 4
gpt4 key购买 nike

这是我的数据框:

df = pd.DataFrame({'a': list('xxxxxzzz'), 'b':[0,0,1,0,1,0,1,1], 'c': [100, 101, 105, 110, 120, 125, 100, 150], 'd':[0,0,0,1,1,0,0,0]})

我将它们分组:

groups = df.groupby(['a', 'd'])

我想向 df 添加另一列,该列在每个组中显示 c 的最后一个值与其 b 之间的差异(以百分比表示) code> 为 0,其 b 的最后一个值为 1。

例如,在第一组中,我想比较第 2 行和第 1 行的 c

我想要的如下所示:

('x', 0)
a b c d result
0 x 0 100 0 3.96
1 x 0 101 0 3.96
2 x 1 105 0 3.96
('x', 1)
a b c d result
3 x 0 110 1 9.09
4 x 1 120 1 9.09
('z', 0)
a b c d result
5 z 0 125 0 20.0
6 z 1 100 0 20.0
7 z 1 150 0 20.0

最佳答案

定义自定义函数并使用GroupBy.apply

def func(s):
l0 = s[s.b==0].tail(1).c.item()
l1 = s[s.b==1].tail(1).c.item()
s['result'] = (l1 - l0)/l0 * 100
return s

df.groupby(['a','d']).apply(func)

输出

    a   b   c   d   result
0 x 0 100 0 3.960396
1 x 0 101 0 3.960396
2 x 1 105 0 3.960396
3 x 0 110 1 9.090909
4 x 1 120 1 9.090909
5 z 0 125 0 20.000000
6 z 1 100 0 20.000000
7 z 1 150 0 20.000000

如果您分别需要每个组,只需使用列表理解[func(g) for n, g in df.groupby(['a','d'])]

关于python - 比较 pandas groupby 中的最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55079055/

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