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”来引用函数的变量。