Python 3.x 使用if-else条件筛选组
我有这样一个熊猫数据框: 身份证件 第1层 二级 1111 射频 B 1111 好啊 B 2222 射频 B 2222 射频 E 3333 好啊 B 3333 瞧 BPython 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
让我们使用
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:)这太棒了。非常感谢。接受,再次感谢。