如何使用groupby选择条件行并且只返回一个结果? (Python)

问题描述 投票:0回答:1

我想通过一定的规则获得groupby之后的唯一一行(

  • 如果 tier != Unknown,则获取 Rank = 1 的 tier。 (a001)
  • 或者获得等级=2的等级(b001)
  • 如果等级 = 1 且等级 = 未知 (c001),则返回等级 = 'no_tier'

** 对于每个 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
python-3.x pandas dataframe group-by
1个回答
0
投票

代码

分组+第一个

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
© www.soinside.com 2019 - 2024. All rights reserved.