Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.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,我有一个函数f(a,b),它取两个数据帧,将不同的公式应用于如下值: def f(a, b): if a > 0 and b > 0: return a + b elif a > 0 and b < 0: return a - b elif a < 0 and b > 0: return a * b elif a < 0 and b < 0: return a / b e

我有一个函数f(a,b),它取两个数据帧,将不同的公式应用于如下值:

def f(a, b):
   if a > 0 and b > 0:
      return a + b
   elif a > 0 and b < 0:
      return a - b
   elif a < 0 and b > 0:
      return a * b
   elif a < 0 and b < 0:
      return a / b
   else:
      print('bad')

dfa = pd.DataFrame({'a':[1, 1]})
dfb = pd.DataFrame({'b':[2, 2]})
f(dfa,dfb)
def(a,b):
如果a>0且b>0:
返回a+b
如果a>0且b<0:
返回a-b
如果a<0且b>0:
返回a*b
elif a<0和b<0:
返回a/b
其他:
打印('坏')
dfa=pd.DataFrame({'a':[1,1]})
dfb=pd.DataFrame({'b':[2,2]})
f(dfa,dfb)
这里的问题是,我需要在函数中处理的当前值来进行分支,但是,使用and运算符会导致下面的结果

序列的真值不明确。请使用a.empty、a.bool()、a.item()、a.any()或a.all()

使用&会导致

“无法将[type]数组与[bool]类型的标量进行比较”

编辑:

考虑到答案,我开始意识到我的最小示例可能无法很好地表达我的意图

def f(a, b):
  if a > 0 and b > 0:
    X = operationA()
  elif a > 0 and b < 0:
    X = operationB()
  elif a < 0 and b < 0:
    X = operationC()
  elif a < 0 and b < 0:
    X = operationD()
  else:
    print('bad')

  Y = operationY()
  return X, Y

# both dataframes are part of a training example label example = (a, b)
df_label_partA = pd.DataFrame({'a':[1, 1, -1, -1]})
df_label_partB = pd.DataFrame({'b':[1, -1, 1, -1]})
f(df_label_partA, df_label_partB)
def(a,b):
如果a>0且b>0:
X=操作a()
如果a>0且b<0:
X=操作B()
elif a<0和b<0:
X=操作C()
elif a<0和b<0:
X=操作d()
其他:
打印('坏')
Y=操作Y()
返回X,Y
#两个数据帧都是训练示例标签example=(a,b)的一部分
df_label_partA=pd.DataFrame({'a':[1,1,-1,-1]})
df_label_partB=pd.DataFrame({'b':[1,-1,1,-1]})
f(df_标签A部分,df_标签B部分)
不能单独考虑数据帧,因为每个数据帧都是标签列表的一部分(基本上是一个元组,分为两个列表)

IIUC:

pd.concat([dfa,dfb],轴=1)。应用(λx:f(*x),轴=1)
产出:

03
1    3
数据类型:int64
您可以试试这个

def f(a, b):
   if all(a > 0) and all(b > 0):
      return dfa.a + dfb.b
   elif all(a > 0) and all(b < 0):
      return dfa.a - dfb.b
   elif all(a < 0) and all(b > 0):
      return dfa.a * dfb.b
   elif all(a < 0) and all(b < 0):
      return dfa.a / dfb.b
   else:
      print('bad')

dfa = pd.DataFrame({'a':[1, 1]})
dfb = pd.DataFrame({'b':[2, 2]})
f(dfa,dfb)

谢谢你的回复。如果我理解所有(…)正确,那么当所有条目都满足条件时,这是真的。但是,我肯定知道这些值是正的、负的或0,并且a与b相关联,所以我需要相同索引的值。不过,a和b的大小相同。我编辑了我的问题lambda调用如何处理2个返回值?我已经编辑了我的问题lambda调用如何处理2个返回值?它不是,输出是一个序列,最左边的数字是索引。因此
pd.concat
将使两列并排相邻。然后,
*x
将按列解压(因此,
axis=1
apply
中)。例如,检查:
pd.concat([dfa,dfb],axis=1)。apply(lambda x:list([*x]),axis=1)
-
*
在这种情况下,解压值sturns,160000中有一个值导致了此问题。虽然有点慢,但它现在正在工作。但它完成了任务。感谢您的帮助始终共享整个错误消息。我强烈建议你阅读熊猫的文档,不,让你澄清一下:问题在于比较,这两个相关的问题不是关于什么吗?
0    3
1    3
dtype: int64