Python 按顺序值分组

Python 按顺序值分组,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我不知道该如何称呼这个操作,所以我无法真正用谷歌搜索任何东西,但以下是我要做的: 我有这个数据框: df = pd.DataFrame({"name": ["A", "B", "B", "B", "A", "A", "B"], "value":[3, 1, 2, 0, 5, 2, 3]}) df name value 0 A 3 1 B 1 2 B 2 3 B 0 4 A 5 5 A 2 6

我不知道该如何称呼这个操作,所以我无法真正用谷歌搜索任何东西,但以下是我要做的:

我有这个数据框:

df = pd.DataFrame({"name": ["A", "B", "B", "B", "A", "A", "B"], "value":[3, 1, 2, 0, 5, 2, 3]})
df
  name  value
0    A      3
1    B      1
2    B      2
3    B      0
4    A      5
5    A      2
6    B      3
我想在
df.name
上对它进行分组,并在
df.values
上应用
max
函数,但前提是名称是按顺序排列的。因此,我期望的结果如下:

df.groupby_sequence("name")["value"].agg(max)
  name  value
0    A      3
1    B      2
2    A      5
3    B      3

有没有关于如何做到这一点的线索?

不完全是熊猫解决方案,但您可以使用itertools:

from operator import itemgetter

import pandas as pd
from itertools import groupby

df = pd.DataFrame({"name": ["A", "B", "B", "B", "A", "A", "B"], "value":[3, 1, 2, 0, 5, 2, 3]})

result = [max(group, key=itemgetter(1)) for k, group in groupby(zip(df.name, df.value), key=itemgetter(0))]

print(result)
输出

[('A', 3), ('B', 2), ('A', 5), ('B', 3)]

使用
pandas
,您可以在名称从一行更改到另一行时进行分组,使用
(df.name!=df.name.shift()).cumsum()
,这实际上是将连续名称分组在一起:

>>> df.groupby((df.name!=df.name.shift()).cumsum()).max().reset_index(drop=True)
  name  value
0    A      3
1    B      2
2    A      5
3    B      3