Python 数据帧项上的迭代

Python 数据帧项上的迭代,python,pandas,Python,Pandas,我已经读过很多次,在数据帧中应该避免迭代,所以我一直在尝试“更好的方法”,比如应用函数,但我遇到了以下错误: 级数的真值是模糊的 我需要在不同的行项目上运行迭代计算,并获得更新的值。下面是一个简化的示例,但实际案例中包含大量数学知识,因此,函数是首选函数: df = pd.DataFrame({'A':[10,20,30,40], 'B':[4,3,2,1]}) def match_col(A,B): while A != B: B = B + 1 df.apply(

我已经读过很多次,在数据帧中应该避免迭代,所以我一直在尝试“更好的方法”,比如应用函数,但我遇到了以下错误:

级数的真值是模糊的

我需要在不同的行项目上运行迭代计算,并获得更新的值。下面是一个简化的示例,但实际案例中包含大量数学知识,因此,函数是首选函数:

df = pd.DataFrame({'A':[10,20,30,40], 'B':[4,3,2,1]})

def match_col(A,B):
    while A != B:
        B = B + 1

df.apply(lambda x: match_col(df['A'],df['B']),axis=1)
基本上,我需要让每一行使用许多项,运行迭代计算,并输出新的/更新的项。我哪里弄错了逻辑?

相反,请执行以下操作:

df.apply(lambda x: match_col(x['A'],x['B']),axis=1)
因为您将函数应用于每一行,所以该行的值需要传递给
match\u col
,而不是整个系列,例如
df['A']

您还需要
从函数中返回
一些内容:

def match_col(A,B):
    while A != B:
        B = B + 1
    return B
然后您将得到以下结果:

In [10]: df.apply(lambda x: match_col(x['A'],x['B']),axis=1)                    
Out[10]: 
0    10
1    20
2    30
3    40
dtype: int64
相反,你应该:

df.apply(lambda x: match_col(x['A'],x['B']),axis=1)
因为您将函数应用于每一行,所以该行的值需要传递给
match\u col
,而不是整个系列,例如
df['A']

您还需要
从函数中返回
一些内容:

def match_col(A,B):
    while A != B:
        B = B + 1
    return B
然后您将得到以下结果:

In [10]: df.apply(lambda x: match_col(x['A'],x['B']),axis=1)                    
Out[10]: 
0    10
1    20
2    30
3    40
dtype: int64

我在apply函数中做了一些更改

import numpy as np
import pandas as pd

df = pd.DataFrame({'A':[10,20,30,40], 'B':[1,3,2,1]})

def match_col(col):
    while col.A != col.B:
        col.B = col.B + 1
        return col.B


df.apply(match_col,axis=1)
输出

0    2
1    4
2    3
3    2
dtype: int64

我在apply函数中做了一些更改

import numpy as np
import pandas as pd

df = pd.DataFrame({'A':[10,20,30,40], 'B':[1,3,2,1]})

def match_col(col):
    while col.A != col.B:
        col.B = col.B + 1
        return col.B


df.apply(match_col,axis=1)
输出

0    2
1    4
2    3
3    2
dtype: int64

如果函数仅依赖于当前行,则不需要
apply
。您可以只执行向量运算。如果函数仅依赖于当前行,则不需要
apply
。你可以只做向量运算。多亏了这一点,我现在意识到错误来自于使用“df”而不是“x”来引用函数的变量。多亏了这一点,我现在意识到错误来自于使用“df”而不是“x”来引用函数的变量。