您可以使用分组依据:
c_maxes = df.groupby(['A', 'B']).C.transform(max)df = df.loc[df.C == c_maxes]
c_maxes是每个组
Series中的最大值的a
,
C但与的长度和索引相同
df。如果您还没有使用过,
.transform那么打印
c_maxes可能是个好主意,以了解其工作原理。
使用的另一种方法
drop_duplicates是
df.sort('C').drop_duplicates(subset=['A', 'B'], take_last=True)不确定哪种方法更有效,但是我猜第一种方法不涉及排序。
编辑: 从
pandas 0.18第二个解决方案将是
df.sort_values('C').drop_duplicates(subset=['A', 'B'], keep='last')或者,
df.sort_values('C', ascending=False).drop_duplicates(subset=['A', 'B'])无论如何,该
groupby解决方案的性能似乎都更高:
%timeit -n 10 df.loc[df.groupby(['A', 'B']).C.max == df.C]10 loops, best of 3: 25.7 ms per loop%timeit -n 10 df.sort_values('C').drop_duplicates(subset=['A', 'B'], keep='last')10 loops, best of 3: 101 ms per loop


