Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用数据帧的子集和_Python_Pandas - Fatal编程技术网

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))