我有以下数据集,您可以使用此代码复制:
number_order = [2,2,3,3,5,5,5,6]
number_fakecouriers = [1,2,1,2,1,2,3,3]
dictio = {"number_order":number_order, "number_fakecouriers":number_fakecouriers}
actual_table = pd.DataFrame(dictio)
我需要编写一段代码,通过 for 循环或 groupby 生成以下结果:
代码应在“number_orders”列上执行 groupby,然后取“number_fakeorders”列中的最小值,但每次都应迭代地排除已选择的“number_fakeorders”列中的最小值。然后,如果没有更多可用值,则应输入“无”。
这是一行一行的解释:
1) "number_orders"= 2 : 这里 "number_fakeorders"的值为 "1",它只是 "number_fakeorders"的最小值,其中 ["number_orders"= 2] , 因为它是第一个出现的值
2) "number_orders"= 3 : 这里 "number_fakeorders"的值为 "2"因为已经为 ["number_orders"= 2] 选择了 "1",所以排除 "1 ",其中 ["number_orders"= 3] 最小值为 "2"
3) "number_orders"= 5 : 这里 "number_fakeorders"的值为 "3"因为已经选择了 "1"和 "2"
4) "number_orders"= 6 : 这里 "number_fakeorders"的值是 "None"因为 ["number_orders"= 6] 的 "number_fakeorders"的唯一值是 "3",并且已经选择了“3”
最佳答案
尝试:
def fn(x, seen):
for v in x:
if v in seen:
continue
seen.add(v)
return v
out = (
actual_table.groupby("number_order")["number_fakecouriers"]
.apply(fn, seen=set())
.reset_index()
)
print(out)
打印:
number_order number_fakecouriers
0 2 1.0
1 3 2.0
2 5 3.0
3 6 NaN
注意:您可以在处理之前对数据帧进行排序(如果尚未排序):
actual_table = actual_table.sort_values(
by=["number_order", "number_fakecouriers"]
)
...
关于python - 在 Python 中,我需要执行一个访问前一个 "grouped value"的迭代 groupby 来建立聚合列的行的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73310927/