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

标签 python python-3.x pandas dataframe group-by

我有一个如下所示的数据框。
我想 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/

相关文章:

python - .split() 是否始终保留字符串中元素的顺序?

python - 有条件地删除 Pandas Dataframe 行

python - 关键事件似乎卡在使用 `turtle.onkey(function(), "键")`

python - 将自定义函数应用于 pandas Series 会产生 AttributeError

python - 如何从Python数据框中对象列内的多个字典键和值中提取最大值和相应键

Python/Matplotlib/Pyside 快速时间追踪滚动

python - 在调用 app.processEvents() 两次之前,qsplashscreen 无法正确显示

python - 创建一个在启动时仅打开终端的 Python/py2app 应用程序?

emacs - emacs 中的 Python 3.3(ropemacs 支持)

python - 导入 pandas.DataFrame 时获取 "IOError: [Errno 13] Permission denied:.."