熊猫分组按顺序值

时间:2018-10-31 20:18:45

标签: python pandas pandas-groupby

我不知道如何调用此操作,因此我无法真正使用Google进行搜索,但这就是我想要做的事情:

我有这个数据框:

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上,并在max上应用df.values函数,但前提是名称是按顺序排列的。所以我想要的结果如下:

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

有什么线索怎么做?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

并非完全是熊猫解决方案,但是您可以使用itertools中的groupby

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)]