gpt4 book ai didi

python - Groupby & Sum 从某个特定值的出现到另一个特定值或相同值的出现

转载 作者:行者123 更新时间:2023-12-01 01:40:00 26 4
gpt4 key购买 nike

我有一个如下所示的数据框。
我想 groupby 'user' & 'eve' 和 sum 'Ses' 直到 100/200 & 从 100 到 200。
此外,返回出现 100/200 的列 'Name' 的值。

如果在一百之后,没有 100 或 200(如 a & 123 或 a & 456 组中的最后一行),则忽略它。

User    eve Ses ID  Name
a 123 1 10 a
a 123 2 11 a
a 123 3 12 a
a 123 4 13 a
a 123 3 100 xyz
a 123 6 10 a
a 456 1 11 a
a 456 2 12 a
a 456 3 13 a
a 456 4 40 a
a 456 1 100 mno
a 456 14 10 a
a 456 7 20 a
a 456 8 30 a
a 456 12 200 pqr
a 456 10 10 a
b 123 1 20 a
b 123 2 30 a
b 123 3 40 a
b 123 4 50 a
b 123 1 70 a
b 123 6 100 abc
b 888 1 20 a
b 888 1 200 jkl
b 888 3 10 a
b 888 4 20 a
b 888 5 30 a
b 888 1 100 rrr
b 888 7 50 a
b 888 8 70 a

上述输入 df 的预期输出是下面的 df。
User    eve Ses Name
a 123 13 xyz
a 456 11 mno
a 456 41 pqr
b 123 17 abc
b 888 2 jkl
b 888 13 rrr

最佳答案

这是我的方法:

# valid IDs
df['valids'] = df['ID'].isin([100,200])

# mask the trailing non-hundred ids
heads = (df['ID'].where(df['valids'])
.groupby([df['User'],df['eve']])
.bfill().notnull()
)
df = df[heads]

# groupby and output:
(df.groupby(['User','eve', df['valids'].shift(fill_value=0).cumsum()],
as_index=False)
.agg({'Ses':'sum', 'Name':'last'})
)

输出:
  User  eve  Ses Name
0 a 123 13 xyz
1 a 456 11 mno
2 a 456 41 pqr
3 b 123 17 abc
4 b 888 2 jkl
5 b 888 13 rrr

关于python - Groupby & Sum 从某个特定值的出现到另一个特定值或相同值的出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59281644/

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