熊猫数据框项上的迭代

时间:2020-01-31 02:19:24

标签: 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(lambda x: match_col(df['A'],df['B']),axis=1)

基本上,我需要为每一行使用许多项目,运行迭代计算,并输出新的/更新的项目。我在哪里弄错了逻辑?

2 个答案:

答案 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