如何获取唯一ID的数据帧

时间:2018-03-09 12:42:57

标签: python pandas duplicates

我正在尝试通过唯一的binId对以下数据帧进行分组,然后根据“z”解析生成的行并选择具有最高值“z”的行。这是我的数据框架。

import pandas as pd
df = pd.DataFrame({'ID':['1','2','3','4','5','6'], 'binId': ['1','2','2','1','1','3'], 'x':[1,4,5,6,3,4], 'y':[11,24,35,16,23,34],'z':[1,4,5,2,3,4]})

` 我尝试了下面的代码,它提供了所需的答案,

def f(x):
    tp = df[df['binId'] == x][['binId','ID','x','y','z']].sort_values(by='z', ascending=False).iloc[0]
    return tp`

然后,

binids= pd.Series(df.binId.unique())
print binids.apply(f)

输出是,

binId ID  x   y  z
0     1  5  3  23  3
1     2  3  5  35  5
2     3  6  4  34  4

但执行太慢了。这样做的更快的方法是什么?

1 个答案:

答案 0 :(得分:1)

idxmax用于max的索引并按loc选择:

df1 = df.loc[df.groupby('binId')['z'].idxmax()]

sort_values使用drop_duplicates时更快:

df1 = df.sort_values(['binId', 'z']).drop_duplicates('binId', keep='last')

print (df1)
  ID binId  x   y  z
4  5     1  3  23  3
2  3     2  5  35  5
5  6     3  4  34  4