Python 使用数据帧的子集和
这是我用来计算子集的代码 代码Python 使用数据帧的子集和,python,pandas,Python,Pandas,这是我用来计算子集的代码 代码 import numpy as np array = np.array([15,1,4,6,3,10,4.2]) num = 8.2 def subsetsum(array,num): if num == 0 or num < 1: return None elif len(array) == 0: return None else: if array[0] == num:
import numpy as np
array = np.array([15,1,4,6,3,10,4.2])
num = 8.2
def subsetsum(array,num):
if num == 0 or num < 1:
return None
elif len(array) == 0:
return None
else:
if array[0] == num:
return [array[0]]
else:
with_v = subsetsum(array[1:],(num - array[0]))
if with_v:
return [array[0]] + with_v
else:
return subsetsum(array[1:],num)
print('\nList of Values : ',array)
print('\nSum Desired : ',num)
print('\nValues that add up to sum : ',subsetsum(array,num))
现在,如何使用PANDAS Dataframe而不是Numpy Array来实现相同的功能?您可以通过将
np.Array
替换为pd.Series
并在数组
之后添加.iloc
,以使用位置索引来逐字翻译。这就是我在下面所做的
顺便说一句,你真的想要整数。如果给您的数字只有几位小数,请使用四舍五入(x*100)
之类的方法将其转换为整数。试图实现浮点数和的相等会让人沮丧:0.1+0.2==0.3
是错误的
最重要的是:在这里使用熊猫没有任何好处。这是一个分析数据的模块,而不是解决组合问题的模块。它在引擎盖下使用NumPy,因此您得到的是一个较慢的代码,并且额外增加了索引数据层的开销
如果您想提高代码的性能,我建议在开始之前按降序对数组进行排序,以便将太大而无法使用的值快速移开
import pandas as pd
array = pd.Series([15,1,4,6,3,10,4])
num = 8
def subsetsum(array,num):
if num == 0 or num < 1:
return None
elif len(array) == 0:
return None
else:
if array.iloc[0] == num:
return [array.iloc[0]]
else:
with_v = subsetsum(array.iloc[1:], (num - array.iloc[0]))
if with_v:
return [array.iloc[0]] + with_v
else:
return subsetsum(array.iloc[1:],num)
print('\nList of Values : ',array)
print('\nSum Desired : ',num)
print('\nValues that add up to sum : ',subsetsum(array,num))
将熊猫作为pd导入
数组=pd.系列([15,1,4,6,3,10,4])
num=8
def子系统(阵列,数量):
如果num==0或num<1:
一无所获
elif len(数组)==0:
一无所获
其他:
如果array.iloc[0]==num:
返回[array.iloc[0]]
其他:
使用_v=subsetsum(array.iloc[1:],(num-array.iloc[0]))
如果使用_v:
返回[array.iloc[0]]+,带_v
其他:
返回subsetsum(array.iloc[1:],num)
打印('\n值列表:',数组)
打印('\n所需数量:',num)
打印('\n加起来的值:',子项(数组,num))
我更正了缩进。检查是否正确。“为我翻译这段代码”通常不是一个很好的提问方式。请解释代码应该对示例执行什么操作。我已经编辑了问题并包含了示例。我不是要翻译代码,而是要如何解决问题。
import pandas as pd
array = pd.Series([15,1,4,6,3,10,4])
num = 8
def subsetsum(array,num):
if num == 0 or num < 1:
return None
elif len(array) == 0:
return None
else:
if array.iloc[0] == num:
return [array.iloc[0]]
else:
with_v = subsetsum(array.iloc[1:], (num - array.iloc[0]))
if with_v:
return [array.iloc[0]] + with_v
else:
return subsetsum(array.iloc[1:],num)
print('\nList of Values : ',array)
print('\nSum Desired : ',num)
print('\nValues that add up to sum : ',subsetsum(array,num))