如何使用 pandas Dataframe 中具有列值的行来匹配行和过滤

How to match rows and filtering using rows with column values in pandas Dataframe

例如:

我有

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

如果所有其他列匹配

,我需要从数据框中删除最低单位
Name   Code   State  Unit  
John    +2     AZ     3
Mike    +3     UT     4
Jack    +4     KY     6
Jack    +5     KY     6

如果只需要删除第一个最低值第一个排序值并使用 DataFrame.duplicated in boolean indexing:

df = df.sort_values('Unit')

m1 = df.duplicated(['Name','Code','State'])
m2 = df.duplicated(['Name','Code','State'], keep=False)
df = df[m1 | ~m2]

print (df)
   Name  Code State  Unit
0  John     2    AZ     3
2  Mike     3    UT     4
3  Jack     4    KY     6
4  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]