python - 如何通过另一列的最小值过滤重复的数据框?
问题描述
我编写了一个程序,它接收由测量机器生成的两个格式相同的 CSV 文件。它将这两个文件与包含两个用户输入的 CSV 文件规则的长度相等的第三个 CSV 文件组合在一起。
然后,组合的数据帧通过一个函数来确定哪些特征(在本例中为索引 i)与标称值相距足够远,以至于它们需要应用偏移量。然后,我将这个新数据框拆分为重复和非重复列表。重复列表(df_dup)基于两列的子集相等,非重复列表是没有进入重复列表的所有其他内容。我写这一段来解释为什么我的数据框每次运行时都会有所不同。
我想要做的是通过 df_dup 并为每个分组(即基于它们具有相同的 TOOL 和 AXIS 列值)确定哪一行具有 MIN“HI-TOLERANCE”列值并将该行显示为代表。如果同一分组中的多行也具有相同的容差值,那么我真的不在乎选择哪个。它可以以编程方式选择第一个/最后一个/最简单的。
我尝试使用 groupby 并根据另一个 StackOverflow 帖子进行转换,但它根本没有改变我的数据框。这是我试过的代码:
df_dup = df_dup[df_fdup['HI-TOL'] == df_dup.groupby('TOOL')['HI-TOLERANCE'].transform('min')]
如果我的措辞含糊不清,我深表歉意,并将尽我所能详细说明。如果有人能指出我的方向,我基本上想过滤我的 df_dup 以便根据另一列中的最小值从每个分组中只选择一行。
解决方案
你可以idxmin
像这样使用
import pandas as pd
df = pd.read_csv('data.csv')
idxmin = df.groupby(['TOOL', 'AXIS'])['HI-TOLERANCE'].idxmin()
print(df.loc[idxmin])
输出
TOOL AXIS HI-TOLERANCE
0 1 1 1
2 1 2 2
数据.csv
TOOL,AXIS,HI-TOLERANCE
1, 1, 1
1, 1, 2
1, 2, 2
1, 2, 4
1, 2, 5
推荐阅读
- android - 如何从屏幕底部排列图标?
- python - 如何更改 ttk 比例滑块的颜色?
- javascript - 谷歌自动完成,第二个输入基于第一个结果
- php - 使用 PHP 创建具有动态内容的 Bootstrap 轮播
- jenkins - Jenkins 测试结果可用但没有趋势图
- c++ - Qt:没有足够的参数用于类似函数的宏调用'realloc',qvector.h
- gitlab - Gitlab CI:是否可以从以前的作业中访问将它们存储在同一路径中的工件?
- flutter - 代码管理和调用服务器颤动
- blockchain - 区块链分布式数据库
- node.js - 如何使用单个 knex 连接处理具有多个模式的(oracle)数据库连接?