<1111> 1111 确定 B 2222 RF >td style="text-align:left;">B2222 RF E 3333 确定 [/tr>3333 LO B
我有一个熊猫数据帧,如下所示:
第1层让我们使用pd.Categorical
&drop_duplicates
df['Tier1'] = pd.Categorical(df['Tier1'],['RF','OK','LO'],ordered=True)
df['Tier2'] = pd.Categorical(df['Tier2'],['B','E'],ordered=True)
df1 = df.sort_values(['Tier1','Tier2']).drop_duplicates(subset=['ID'],keep='first')
print(df1)
ID Tier1 Tier2
0 1111 RF B
2 2222 RF B
4 3333 OK B
查看Tier1
,您可以看到订单。
print(df['Tier1'])
0 RF
1 OK
2 RF
3 RF
4 OK
5 LO
Name: Tier1, dtype: category
Categories (3, object): ['RF' < 'OK' < 'LO']
您可以使用两个groupby
+agg
Pandas调用。由于排序RF>OK>LO
和B>E
分别符合(反向(字典排序,因此可以使用琐碎的min
/max
函数进行聚合(否则可以编写自己的自定义最小-最大函数(
以下是如何做到这一点(使用2遍过滤(:
tmp = df.groupby(['ID', 'Tier2']).agg(max).reset_index() # Step 1
output = tmp.groupby(['ID', 'Tier1']).agg(min).reset_index() # Step 2
以下是output
:中的结果
ID Tier1 Tier2
0 1111 RF B
1 2222 RF B
2 3333 OK B