下面我有一个逻辑,对于框架测试中的每一行,收集所有级别低于当前行并共享id_group的id值。
当我将此代码应用于我的真实的世界数据集时,它非常慢。有没有可能用numpy做类似的事情?
test = pd.DataFrame({'id_group':[10]*10+[11]*5,
'level':list(range(0,10)) + list(range(0,5)),
'id':[i+20 for i in list(range(0,10))]+[i+30 for i in list(range(0,5))]})
def unique_id(row):
threshold = row['level']
main_id = row['id_group']
unique_values = test[(test['level'] < threshold) & (test.id_group==main_id)]['id'].unique()
return unique_values.tolist()
test['list of ids'] = test.apply(lambda row: unique_id(row), axis=1)
1条答案
按热度按时间7eumitmz1#
假设级别在一个组中是唯一的,您可以重写代码以使用排序值:
输出(修改输入以更好地演示代码):
如果你想确保id的唯一性,那么使用
set
也会更有效:输出量: