使用if-else条件过滤熊猫组



我有一个熊猫数据帧,如下所示:

第1层<1111>1111确定B2222RF>td style="text-align:left;">B2222RFE3333确定[/tr>3333LOB

让我们使用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+aggPandas调用。由于排序RF>OK>LOB>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

最新更新