python – 按groupby对中的最大元素过滤数据帧
我有一个四列的数据框
df=DataFrame({'order_id':[134,101,131,159,189,120,102,134,130,231,421,141,129,101], 'user_id':[24,10,24,12,21,17,12],'product_id':[1004,1041,1078,1001,1074,1019,1021,1004,1010,1017,1004],'sector':['a','a','b','d','c','a']}) order_id product_id sector user_id 120 1001 c 10 421 1010 c 10 101 1041 a 10 189 1074 a 10 159 1001 d 12 231 1001 b 12 130 1004 a 12 141 1004 a 12 101 1004 a 12 129 1004 b 17 134 1021 c 21 101 1001 c 24 134 1004 a 24 141 1017 a 24 102 1019 a 24 131 1078 b 24 对于每个product_id,我想通过选择每个的行来过滤数据帧(product_id,user_id) 例如,对于product_id 1001,与user_id 10相关联的max order_id是120,即最大order_id df2=DataFrame({'order_id':[421,131],'product_id':[1010,1078],'sector':['c','b'],'user_id':[10,24]}) order_id product_id sector user_id 421 1010 c 10 189 1074 a 10 134 1004 a 24 141 1017 a 24 102 1019 a 24 131 1078 b 24 对于product_id 1004,没有与user_id 10关联的数据,因此不返回任何行.对于user_id 12来说最大 总结product_id 1004的输出是 order_id product_id sector user_id 141 1017 a 24 我想对所有product_id重复此操作,并将数据帧存储在列表中 我认为解决方案围绕user_id进行分组,然后对order_id和product_id进行过滤,但我坚持这个 df3=df.groupby(['user_id']) for key,val in df3: d=val.sort_values(['order_id','product_id']) print d 解决方法
我不确定这是最有效的解决方案,但它有效:
def get_dataframe_for_product_id(your_input_df,wanted_product_id): df2 = your_input_df.groupby(['user_id']) result = pd.DataFrame([],columns=your_input_df.columns) for key,val in df2: result = pd.concat([result,val[val.order_id > val[val.product_id == wanted_product_id].order_id.max()]]) return result (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |