gpt4 book ai didi

python替代解决方案scipy空间距离,当前解决方案返回MemoryError

转载 作者:太空宇宙 更新时间:2023-11-03 15:21:51 25 4
gpt4 key购买 nike

我有一个数据框和类似的功能:

df = pandas.DataFrame({'Car' : ['BMW_1', 'BMW_2', 'BMW_3', 'WW_1','WW_2','Fiat_1', 'Fiat_2'],
'distance' : [10,25,22,24,37,33,49]})

def my_func(x,y):
z = 2x + 3y
return z

我想获得汽车行驶距离的成对组合,并在 my_func 中使用它们。但有两个条件:x和y不能是同一品牌,且组合不能重复。期望的输出是这样的:

Car      Distance   Combinations                                
0 BMW_1 10 (BMW_1,WW_1),(BMW_1,WW_2),(BMW_1,Fiat_1),(BMW_1,Fiat_1)
1 BMW_2 25 (BMW_2,WW_1),(BMW_2,WW_2),(BMW_2,Fiat_1),(BMW_2,Fiat_1)
2 BMW_3 22 (BMW_3,WW_1),(BMW_3,WW_2),(BMW_3,Fiat_1),(BMW_3,Fiat_1)
3 WW_1 24 (WW_1, Fiat_1),(WW_1, Fiat_2)
4 WW_2 37 (WW_2, Fiat_1),(WW_2, Fiat_2)
5 Fiat_1 33 None
6 Fiat_2 49 None

//Output
[120, 134, 156, 178]
[113, 145, 134, 132]
[114, 123, 145, 182]
[153, 123]
[120, 134]
None
None

下一步我想从每个品牌的“输出”行数组中获取最大数量。最终数据应该如下所示

  Car  Max_Distance
0 BMW 178
1 WW 153
2 Fiat None

MaxU 在这里为我提供了一个很好的答案:python pandas, a function will be applied to the combinations of the elements in one row based on a condition on the other row

但是,尽管我在 super 计算机中运行代码,但我不断收到内存错误,因为我的数据集非常大。有没有更有效的内存方法来实现这一目标?也许将组合保存到数据库然后获得最大值?

最佳答案

这是第一件事的代码:

import pandas as pd
import itertools as it

df = pd.DataFrame({'Car' : ['BMW_1', 'BMW_2', 'BMW_3', 'WW_1','WW_2','Fiat_1', 'Fiat_2'],
'Distance' : [10,25,22,24,37,33,49]})


cars = df['Car'].tolist()
combos = [a for a in list(it.combinations(cars,2)) if a[0].split('_')[0] != a[1].split('_')[0]]

maps_combos = {car: [combo for combo in combos if combo[0] == car] for car in cars}
values = {k:v for k,v in df[['Car', 'Distance']].as_matrix()}
maps_values = {i: [2*value[0] + 3*value[1] for value in j] for i, j in {k: [map(lambda x: values[x], item) for item in v] for k, v in maps_combos.items()}.items() if j}

df['Combinations'] = df['Car'].map(maps_combos)
df['Output'] = df['Car'].map(maps_values)

至于最大,我需要休息一下:)

附注我不确定我是否获得了正确的距离乘法函数。

编辑

这个最大的事情(肯定可以做得更好):

df['Max'] = df['Output'].fillna(0).apply(lambda x: max(x) if x != 0 else np.nan)
df['Brand'] = df['Car'].apply(lambda x: x.split('_')[0])
brand_max = df[['Brand', 'Max']].groupby('Brand').max()

关于python替代解决方案scipy空间距离,当前解决方案返回MemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43468615/

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