首页 > 解决方案 > 如何通过另一列的最小值过滤重复的数据框?

问题描述

我编写了一个程序,它接收由测量机器生成的两个格式相同的 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 以便根据另一列中的最小值从每个分组中只选择一行。

标签: pythonpandas

解决方案


你可以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

推荐阅读