Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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_Dataframe - Fatal编程技术网

Python 将数据帧传递到函数中,然后使用条件执行计算

Python 将数据帧传递到函数中,然后使用条件执行计算,python,pandas,dataframe,Python,Pandas,Dataframe,我将一个大数据帧传递到一个函数中,我编写该函数是为了对条件进行一些计算,但Python返回了一个错误。我想这是因为我正在检查数据列是否等于某个特定值,然后执行一个计算,否则执行另一个计算 我尝试在pandas数组中进行计算,而不是在每行数据中循环,然后逐行计算,因为数据集很大 数据的一个子集如下所示: import pandas as pd myData = pd.DataFrame({'K':[810,820,825,830,840],'Type': ['C','C','P','P','C']

我将一个大数据帧传递到一个函数中,我编写该函数是为了对条件进行一些计算,但Python返回了一个错误。我想这是因为我正在检查数据列是否等于某个特定值,然后执行一个计算,否则执行另一个计算

我尝试在pandas数组中进行计算,而不是在每行数据中循环,然后逐行计算,因为数据集很大

数据的一个子集如下所示:

import pandas as pd
myData = pd.DataFrame({'K':[810,820,825,830,840],'Type':
['C','C','P','P','C'],'S':[978,978,978,978,978],'R':
[0.05,0.05,0.05,0.05,0.05]})
在数据帧中读取的函数如下所示:

def function(type,S,K,r):
    if type == 'C':
        calc = S / K * r
    elif type == 'P':
        calc = (S + r) / K - r * 10
    return calc
我试图通过执行以下操作将myData传递到函数中:

function(myData['Type'],myData['S'],myData['K'],myData['r'])
错误消息是:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我认为这个错误与myData['Type']和Type='C'的条件有关。有没有办法解决这个问题,或者我必须遍历数据集并计算每一行?
谢谢。

IIUC,您可以使用
np。选择

condition = [myData.Type == 'C', myData.Type == 'P']

choiceList = [myData.S / myData.K * myData.R, (myData.S + myData.R) / myData.K - myData.R * 10]

np.select(condition,choiceList)
输出:

array([ 0.06037037,  0.05963415,  0.68551515,  0.67837349,  0.05821429])

IIUC,您可以使用
np。选择

condition = [myData.Type == 'C', myData.Type == 'P']

choiceList = [myData.S / myData.K * myData.R, (myData.S + myData.R) / myData.K - myData.R * 10]

np.select(condition,choiceList)
输出:

array([ 0.06037037,  0.05963415,  0.68551515,  0.67837349,  0.05821429])

我尝试使用
myData.groupby('Type')

结果表明:

Out[149]:
    K    R       S  Type    calc
0   810 0.05    978 C   0.060370
1   820 0.05    978 C   0.059634
2   825 0.05    978 P   0.685515
3   830 0.05    978 P   0.678373
4   840 0.05    978 C   0.058214

Uder 50的声誉是痛苦的添加评论!如果你喜欢它,就接受它吧

我尝试使用
myData.groupby('Type')

结果表明:

Out[149]:
    K    R       S  Type    calc
0   810 0.05    978 C   0.060370
1   820 0.05    978 C   0.059634
2   825 0.05    978 P   0.685515
3   830 0.05    978 P   0.678373
4   840 0.05    978 C   0.058214

Uder 50的声誉是痛苦的添加评论!如果你喜欢它,就接受它吧

使用
myData.apply(lambda x:function(x['Type']、x['S']、x['K']、x['R']、axis=1)
[函数(*x)表示zip中的x(myData['Type']、myData['S']、myData['K']、myData['R'])
[函数(x['Type']、x['S']、x['K']、x['R'])表示myData中的x()。这三种方法都有效!我不熟悉Python和编程,你介意解释第二和第三种方法的含义吗?使用
myData.apply(lambda x:function(x['Type']、x['S']、x['K']、x['R']、axis=1)
[函数(*x)表示zip中的x(myData['Type']、myData['S']、myData['K']、myData['R'])
[函数(x['Type']、x']、x['R']对于myData.iterrows()]
?@Zero中的x,谢谢您的输入。这三种方法都有效!我是Python和编程新手,你介意解释一下第二个和第三个方法是什么意思吗?谢谢你的输入,这个方法很有效。但是,我担心的是,“choiceList”计算列表中的值和存储,然后与“condition”列表进行比较。我不熟悉Python和编程,但这种方法似乎占用了大量内存,对吗?谢谢您的输入,这种方法很有效。但是,我担心的是,“choiceList”计算列表中的值和存储,然后与“condition”列表进行比较。我不熟悉Python和编程,但这种方法似乎会消耗大量内存,对吗?