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]