比较Pandas数据帧中的两行或更多行

时间:2018-03-19 16:01:18

标签: python pandas

我有一个如下所示的数据框:

Reference |   ID  | Length
ref101    |123456 | 10
ref101    |123789 | 5
ref202    |654321 | 20
ref202    |653212 | 40

我正在尝试确定Reference列中每行的哪一行具有最大长度(基于Length列中的值)。例如,ref101 ID 123456的长度大于ID为123789的ref101

我一直在玩.groupby(),但我无处可去。有没有办法在熊猫中进行这种操作?

4 个答案:

答案 0 :(得分:6)

如果它是您想要的整行,请使用groupby + idxmax

df.loc[df.groupby('Reference').Length.idxmax()]

  Reference      ID  Length
0    ref101  123456      10
3    ref202  653212      40

如果您希望长度,那么groupby + max就足够了:

df.groupby('Reference').Length.max()

Reference
ref101    10
ref202    40
Name: Length, dtype: int64

答案 1 :(得分:2)

idxmax有一种方法,它会返回每组最大长度的索引

df.groupby('Reference').Length.idxmax()
Out[495]: 
Reference
ref101    0
ref202    3
Name: Length, dtype: int64

nlargest

df.groupby('Reference').Length.nlargest(1)
Out[496]: 
Reference   
ref101     0    10
ref202     3    40
Name: Length, dtype: int64

答案 2 :(得分:0)

还有一个:

df = df.sort_values(['Reference', 'Length'], ascending=False).drop_duplicates(['Reference'])

答案 3 :(得分:0)

sort_values上有Length,后跟groupbyhead(1)占据第一位:

result_df = df.sort_values('Length',ascending=False).groupby('Reference').head(1))
print(result_df)

结果:

  Reference      ID  Length
3    ref202  653212      40
0    ref101  123456      10