我想通过一定的规则获得groupby之后的唯一一行(
** 对于每个 user_id 的层级,“未知”只会显示一次
这是数据框
user_id tier rank
a001 High 1
a001 Low 2
a001 Unknown 3
b001 Unknown 1
b001 Mid 2
c001 Unknown 1
预期结果
tier
High
Mid
no_tier
我试图写下一个类似的函数
def get_tier(x):
if x['rank'] ==1 and x['tier'] != 'Unknown':
return x['tier']
elif x['rank'] == 2:
return x['tier']
else:
return 'no_tier'
df.goupby('user_id').apply(lambda x : x.apply(get_tier), axis = 1).iloc[0]).reset_index()
but seems like it cant work
代码
分组+第一个
out = df['tier'].mask(df['tier'].eq('Unknown')).groupby(df['user_id']).first().fillna('no_tier')
输出:
user_id
a001 High
b001 Mid
c001 no_tier
Name: tier, dtype: object