Python 3.x 使用if-else条件筛选组

Python 3.x 使用if-else条件筛选组,python-3.x,pandas,Python 3.x,Pandas,我有这样一个熊猫数据框: 身份证件 第1层 二级 1111 射频 B 1111 好啊 B 2222 射频 B 2222 射频 E 3333 好啊 B 3333 瞧 B 让我们使用pd.Categorical&drop\u duplicates df['Tier1'] = pd.Categorical(df['Tier1'],['RF','OK','LO'],ordered=True) df['Tier2'] = pd.Categorical(df['Tier2'],['B','E'],order

我有这样一个熊猫数据框:

身份证件 第1层 二级 1111 射频 B 1111 好啊 B 2222 射频 B 2222 射频 E 3333 好啊 B 3333 瞧 B
让我们使用
pd.Categorical
&
drop\u 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

查看第1层,您可以看到订单

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']
打印(df['Tier1']
0射频
1好的
2射频
3射频
4好的
5劳
名称:第1层,数据类型:类别
类别(3,对象):['RF'<'OK'<'LO']

您可以使用两个
groupby
+
agg
panda调用。由于排序
RF>OK>LO
B>E
分别符合(反向)词典排序,因此您可以使用简单的
min
/
max
函数进行聚合(否则您可以编写自己的自定义min-max函数)。
以下是如何做到这一点(使用双通过滤):

tmp=df.groupby(['ID','Tier2']).agg(max).reset_index()#步骤1
output=tmp.groupby(['ID','Tier1']).agg(min).reset_index()35;步骤2
以下是
输出中的结果:

ID第1层第2层
0 1111射频B
12222射频B
3333好的

good first post btw:)这太棒了。非常感谢。接受,再次感谢。