我有一个如下所示的 Pandas DataFrame:
df = pd.DataFrame({"A": ["apple", "apple", "banana", "banana", "banana", "pineapple"],
"B": [0.5, 0.77, 0.32, 0.16, 0.05, 1],
"C": [132, 44, 32, 11, 0, 5]})
现在,我想从中创建一个 DataFrame,我想在其中为列 A
的每个唯一值保留列 B
的最高值的行,并丢弃其他行。所需的结果如下所示:
A B C
apple 0.77 44
banana 0.32 32
pineapple 1 5
有没有一种优雅的、Python 高效的方法来做到这一点? (真正的 DataFrame 非常大,除了 C
之外还有更多额外的列)
答案 0 :(得分:2)
试试groupby().idxmax()
:
df.loc[df.groupby('A')['B'].idxmax()]
或 drop_duplicates
在已排序的数据帧上:
df.sort_values('B').drop_duplicates('A', keep='last')