Python 如何使用函数使用apply lambda方法迭代数据帧中的列并为其赋值

Python 如何使用函数使用apply lambda方法迭代数据帧中的列并为其赋值,python,pandas,function,loops,dataframe,Python,Pandas,Function,Loops,Dataframe,我想通过使用所需的一组条件编写一个函数来为dataframe中的列赋值,然后使用apply lambda方法将其应用于dataframe列中的列 数据集和预期的输出代码段 index Close_x buynifty square_buynifty nbuy 0 5000 0 0 0 1 5100 0 0 0 2 5300 1

我想通过使用所需的一组条件编写一个函数来为dataframe中的列赋值,然后使用apply lambda方法将其应用于dataframe列中的列

数据集和预期的输出代码段

 index Close_x buynifty square_buynifty nbuy
   0     5000    0             0          0
   1     5100    0             0          0
   2     5300    1             0         5300
   3     5101    0             0         5300
   4     5009    1             0         5300
   5     5201    0             1         5201
   6     5400    0             0          0
   7     5500    0             1          0
   8     5450    0             0          0
   9     5388    1             0         5388
   10    5402    0             0         5388
   11    5499    0             0         5388
   12    5610    0             1         5610
   13    5701    0             0          0
   14    5648    0             0          0
我已经尝试过创建函数并使用
lambda
表达式赋值,但是没有赋值,也没有抛出任何错误

dd['nbuy']=0
def tst(nbuy、buynifty、square_-buynifty、Close_x、df):
df=[]
对于范围(0,len(df))内的i:
如果buynifty[i]==1且nbuy[i]==0:
nbuy[i]=Close_x[i]
elif(平方指数[i]==0):
nbuy[i+1]=nbuy[i]
elif(平方指数[i]==1且n平方指数[i-1]>0):
nbuy[i]=Close_x[i]
nbuy[i+1]=0
elif(平方[i]==1和nbuy[i-1]==0):
nbuy[i]=0
nbuy[i+1]=0
返回nbuy
dd['nbuy']=dd.apply(lambda行:tst(行['nbuy'],行['buynisty'],行['square\u buynisty'],行['Close\u x'],dd),轴=1)
我想通过定义的函数
'tst'
将值按行分配给现有数据帧
'dd'
'nbuy'
'buynifty'
square\u buynifty'
已经是现有的列,并且是二进制变量<代码>'Close_x'是一个浮动值,类似于股票的收盘价


我在
nbuy
列中得到的输出在每一行中仅为零,这与初始化时的结果相同
nbuy
应根据函数计算取
close_x
或0的值,但它只抛出零。请帮助我解决这个问题。

您能提供一些示例开始数据以及该示例数据的输出是什么样子的吗?请查看数据集示例和所需输出的图像。您似乎正在尝试逐行构建数据-据我所知,这不是DataFrame的预期用途。尝试从某处读取未处理的数据(DB、csv文件、numpy ndarray等)然后考虑熊猫的<代码> APPLYMAP 和<代码>移位方法来实现你的目标。described@JD_Trader请提供
代码格式的
数据,而不是图像,以便我们可以直接复制。您的代码有几个问题无法解决:(1)df=[]在for循环重写df变量的值之前。(2) 看起来循环正在覆盖以前迭代中设置的值(通过修改i+1,i-1)。(3) apply用于独立地查看数据帧的每一行/每一列,当前的用法与此目的背道而驰,我建议在数据帧上进行循环,即构造不带循环和不带apply的规则。看起来规则很简单,不需要循环就可以编写代码,但是,您需要更明确地说明条件是什么。您可以提供一些示例开始数据以及该示例数据的输出是什么样子的吗?请查看数据集示例和所需输出的图像。您似乎正在尝试逐行构建数据-这并不是我的DataFrame的预期用途理解力尝试从某处读取未处理的数据(DB、csv文件、numpy ndarray等)然后考虑熊猫的<代码> APPLYMAP 和<代码>移位方法来实现你的目标。described@JD_Trader请提供
代码格式的
数据,而不是图像,以便我们可以直接复制。您的代码有几个问题无法解决:(1)df=[]在for循环重写df变量的值之前。(2) 看起来循环正在覆盖以前迭代中设置的值(通过修改i+1,i-1)。(3) apply用于独立地查看数据帧的每一行/每一列,当前的用法与此目的背道而驰,我建议在数据帧上进行循环,即构造不带循环和不带apply的规则。看起来规则非常简单,可以不使用循环进行编码,但是您需要更明确地说明条件是什么。