熊猫 - 从组中获取最大行数

时间:2021-02-13 19:58:13

标签: python pandas dataframe

我有以下数据框:

    id  value col1 col2 col3
 0   1   10    W    A    B
 1   1   15    X    Y    Z
 2   2   4     K    L    M
 3   3   8     M    N    B
 4   3   15    M    N    B 

以下为每个带有 valuegroupby() 的 id 提供最大 transform()

df.groupby("id")["value"].transform(max)

输出:

1   15
2   4
3   15

我需要的是获得以下内容。

    id  value col1 col2 col3
 1   1   15    X    Y    Z
 2   2   4     K    L    M
 4   3   15    M    N    B 

换句话说,对于每个唯一的 value,我需要最大 id 的所有行。我相信答案很简单,但找不到。提前致谢。

编辑:请注意,不同 id 的值可能相同,并且 value 列在我原来的 df 中采用字符串格式。它可以获得的值是有限的,但它们的层次结构是预定义的。

以下给出“ValueError”

df.loc[df.groupby('id')['value'].idxmax()]

pandas\core\groupby\groupby.py in wrapper(*args, **kwargs)
    777             if self.obj.ndim == 1:
    778                 # this can be called recursively, so need to raise ValueError
--> 779                 raise ValueError

1 个答案:

答案 0 :(得分:1)

您可以按值排序,然后删除重复项,只保留您关心的最大值。

import pandas as pd
data = [['0', '1', 10, 'W', 'A', 'B'],
['1', '1', 15, 'X', 'Y', 'Z'],
['2', '2', 4, 'K', 'L', 'M'],
['3', '3', 8, 'M', 'N', 'B'],
['4', '3', 15, 'M', 'N', 'B']]
df = pd.DataFrame(data=data,columns=['idx', 'id', 'value', 'col1', 'col2', 'col3'])
df.sort_values(by=['id','value']).drop_duplicates(subset=['id'],keep='last')