我有以下数据框:
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
以下为每个带有 value
和 groupby()
的 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
答案 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')