我已经读过很多遍了,应该避免在数据帧中进行迭代,因此我一直在尝试“更好的方法”,例如应用函数,但是我陷入了以下错误:
系列的真实值不明确
我需要跨各种行项目运行迭代计算并获取更新的值。这是一个简化的示例,但是实际案例中有很多数学运算,因此为什么要选择函数:
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)
基本上,我需要为每一行使用许多项目,运行迭代计算,并输出新的/更新的项目。我在哪里弄错了逻辑?
答案 0 :(得分:0)
代替:
df.apply(lambda x: match_col(x['A'],x['B']),axis=1)
因为要在每行上应用该函数,所以该行的值就是需要传递给match_col
的值,而不是整个序列,例如df['A']
。
您还需要从功能中return
进行一些操作
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
答案 1 :(得分:0)
我在应用功能上做了一些更改
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