gpt4 book ai didi

python - 按 groupby 对中的最大元素过滤数据框

转载 作者:太空宇宙 更新时间:2023-11-03 12:02:10 24 4
gpt4 key购买 nike

我有一个四列的数据框

df=DataFrame({'order_id':[134,101,131,159,101,189,120,102,134,130,231,421,141,129,141,101],\
'user_id':[24,10,24,12,24,10,10,24,21,12,12,10,12,17,24,12],
'product_id':[1004,1041,1078,1001,1001,1074,1001,1019,1021,1004,1001,1010,1004,1004,1017,1004],
'sector':['a','a','b','d','c','a','c','a','c','a','b','c','a','b','a','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) 的行来过滤数据框order_id 值大于与 (product_id, user_id) 对关联的最大 order_id 的对

例如product_id 1001,对应user_id 10的max order_id为120,max order_id与 user_id 12 关联的是 231,对于 user_id 24,最大 order_id 是 101,所以对于 product_id 1001,我会喜欢返回 DataFrame

df2=DataFrame({'order_id':[421,189,134,141,102,131],
'product_id':[1010, 1074,1004,1017,1019,1078],
'sector':['c','a','a','a','a','b'],
'user_id':[10,10,24,24,24,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 最大的order_id 为 141 并与 1004 相关联。由于没有与 user_id 12 相关联的 order_id 更大,因此不会返回任何行。对于 user_id 17,只有一个条目,它与 product_id 1004 相关联,因此没有其他 product_id 的与 user_id 17 关联。不能有更大的 order_id。最后,对于user_id 24,关联的最大order_idproduct_id 1004 为 134。在本例中,product_id 1017 的 order_id 为 141,因此必须返回其行。

总结 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

关于python - 按 groupby 对中的最大元素过滤数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45535732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com