Python 如何在Dataframe中使用具有列值的行匹配行和筛选

Python 如何在Dataframe中使用具有列值的行匹配行和筛选,python,pandas,dataframe,duplicates,filtering,Python,Pandas,Dataframe,Duplicates,Filtering,例如: 我有 Name Code State Unit John +2 AZ 3 Mike +3 UT 3 Mike +3 UT 4 Jack +4 KY 6 Jack +5 KY 6 如果所有其他列都匹配,我需要从dataframe中删除最低的单元 Name Code State Unit John +2 AZ 3 Mike +

例如:

我有

Name   Code   State  Unit  
John    +2     AZ     3
Mike    +3     UT     3
Mike    +3     UT     4
Jack    +4     KY     6
Jack    +5     KY     6
如果所有其他列都匹配,我需要从dataframe中删除最低的单元

Name   Code   State  Unit  
John    +2     AZ     3
Mike    +3     UT     4
Jack    +4     KY     6
Jack    +5     KY     6

如果需要,只删除第一个最低值第一个排序值并在中使用:

如果需要删除所有最低值,您可以比较第一个掩码的每组最小值:

print (df)
   Name  Code State  Unit
0  John     2    AZ     3
1  Mike     3    UT     3
2  Mike     3    UT     3
3  Mike     3    UT     4
4  Jack     4    KY     6
5  Jack     5    KY     6

m1 = df.groupby(['Name','Code','State'])['Unit'].transform('min').eq(df['Unit'])
m2 = df.duplicated(['Name','Code','State'], keep=False)
df = df[~m1 | ~m2]

print (df)
   Name  Code State  Unit
0  John     2    AZ     3
3  Mike     3    UT     4
4  Jack     4    KY     6
5  Jack     5    KY     6
编辑:

如果需要匹配每列的所有最大单位:

m1 = df.groupby(['Name','Code','State'])['Unit'].transform('max').eq(df['Unit'])

df2 = df[m1]

除了第一个,还是最后一个?而且,这看起来不像你所做的<代码>迈克。。。4存在于输出中我需要最大的“单位”数当然,根据我的需要,我使用了变换('max')和“ne”而不是“eq”
m1 = df.groupby(['Name','Code','State'])['Unit'].transform('max').eq(df['Unit'])

df2 = df[m1]