使用GroupBy查找数据帧中的最小值

2024-09-29 17:50:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的数据:

Index SourceID  ComparedID  Distance
571   106       8           0.004846
572   106       11          0.000000
573   106       23          0.012712
574   107       84          0.002800
575   107       70          0.007555

它位于pandas数据帧中。我正在想办法:

我想从dataframe创建一个结果,找到最小距离并返回ComparedID。你知道吗

所以输出看起来像:

SourceID ComparedID Distance
106      11         0.000000
107      84         0.002800

我该怎么做?你知道吗


Tags: 数据距离dataframepandasindexdistance办法sourceid
3条回答

可以使用idxmin()

df.iloc[df.groupby('SourceID')['Distance'].idxmin(), :]

    Index   SourceID    ComparedID  Distance
1   572     106         11          0.0000
3   574     107         84          0.0028

我不确定你到底需要什么,所以我在下面列出了2个选项。你知道吗

<强>1。不按源ID分组

这是获得2个最小距离的一种方法:

df.nsmallest(2, columns=['Distance'])

#    Index  SourceID  ComparedID  Distance
# 1    572       106          11    0.0000
# 3    574       107          84    0.0028

要仅返回comparedId列表,请执行以下操作:

df.nsmallest(2, columns=['Distance'])['ComparedID'].tolist()

# [11, 84]

<强>2。按源ID分组

这里的想法是按距离排序,然后按SourceID删除重复项:

df.sort_values('Distance').drop_duplicates('SourceID')

结果:

   Index  SourceID  ComparedID  Distance
1    572       106          11    0.0000
3    574       107          84    0.0028
df.sort_values(by='Distance').groupby('SourceID').agg('first')

您希望按距离对数据帧进行排序,并为每个'SourceID'获取距离最小的行,即每个组的第一行。你知道吗

上述操作产生以下输出:

        Index   ComparedID  Distance
SourceID            
106     572     11          0.0000
107     574     84          0.0028

当您使用group by时,分组的列最终会被索引,您可以通过随后重置索引来展平数据帧,以获得所需的输出

df.sort_values(by='Distance').groupby('SourceID').agg('first').reset_index()

输出:

    SourceID    Index   ComparedID  Distance
0   106         572     11          0.0000
1   107         574     84          0.0028

相关问题 更多 >

    热门问题