You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame高效行筛选问询:双整数列组合取浮点列最小值

嗨,这个需求用pandas的内置方法就能高效解决,完全不用手动遍历组合(手动遍历在数据量大的时候效率极低)。我给你两种实用的高效方案,你可以根据自己的场景选择:

方案1:groupby() + idxmin() (推荐,直接定位最小值行)

这个方法是最直接的:先按两个整数列(比如你的titi和tutu)分组,然后找到每组中目标浮点列(tete)最小值对应的行索引,最后用这些索引提取原数据即可。

示例代码:

import pandas as pd

# 假设你的数据集是df
df = pd.DataFrame({
    'toto': [0, 1, 2],
    'tata': ['a', 'b', 'c'],
    'titi': [18, 18, 18],
    'tutu': [600, 600, 600],
    'tete': [4.5, 10.1, 1.2]
})

# 按组合列分组,获取tete最小值的行索引
min_row_indices = df.groupby(['titi', 'tutu'])['tete'].idxmin()
# 根据索引筛选出目标行,重置索引让结果更整洁
result_df = df.loc[min_row_indices].reset_index(drop=True)

print(result_df)

输出结果会是tete值为1.2的那一行,完美符合你的需求。这个方法的优势是效率极高,idxmin()直接定位到最小值的位置,避免了不必要的数据复制,适合中等甚至大规模数据集。

方案2:sort_values() + drop_duplicates() (直观易理解)

如果你更习惯先排序再去重的逻辑,这个方法也很实用:先按组合列排序,再按目标浮点列升序排列,最后保留每组的第一行(也就是最小值所在的行)。

示例代码:

# 先按组合列排序,再按tete升序排序
sorted_df = df.sort_values(by=['titi', 'tutu', 'tete'], ascending=[True, True, True])
# 保留每组的第一行,即tete最小的行
result_df = sorted_df.drop_duplicates(subset=['titi', 'tutu'], keep='first').reset_index(drop=True)

print(result_df)

这个方法的好处是逻辑直观,如果你之后需要保持数据的排序状态,这个方案会更顺手。

小提醒

  • 如果同一组合下tete有多个相同的最小值,两种方法默认都会保留第一个出现的那一行;若需调整保留规则,可以修改对应参数(比如drop_duplicates的keep参数)。
  • 确保组合列(titi和tutu)的数据类型正确,不过即使是其他类型,这两个方法也能正常工作,只是你的需求里明确是整数列~

内容的提问来源于stack exchange,提问作者Stéphane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:48:34