如何在迭代pandas数据帧时创建新列并插入行值

seq*_*ard 7 python iteration dataframe pandas

我正在尝试创建一个逐行迭代pandas数据帧的函数.我想基于其他列的行值创建一个新列.我的原始数据框可能如下所示:

df:

   A   B
0  1   2
1  3   4
2  2   2
Run Code Online (Sandbox Code Playgroud)

现在我想在每个索引位置创建一个填充了列A - 列B的行值的新列,以便结果如下所示:

 df:

       A   B   A-B
    0  1   2   -1
    1  3   4   -1
    2  2   2    0
Run Code Online (Sandbox Code Playgroud)

我工作的解决方案,但只有当我不在函数中使用它时:

for index, row in df.iterrows():
        print index
        df['A-B']=df['A']-df['B']
Run Code Online (Sandbox Code Playgroud)

这给了我想要的输出,但当我尝试将它用作函数时,我收到一个错误.

def test(x):
    for index, row in df.iterrows():
        print index
        df['A-B']=df['A']-df['B']
    return df
df.apply(test)

ValueError: cannot copy sequence with size 4 to array axis with dimension 3
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么,我怎么能让它发挥作用?

Ant*_*pov 9

这是因为apply方法默认适用于列,axis如果您希望通过行,请更改为 1:

:{0 或 'index',1 或 'columns'},默认为 0

  • 0 或 'index':对每一列应用函数
  • 1 或“列”:将函数应用于每一行
df.apply(test, axis=1)
Run Code Online (Sandbox Code Playgroud)

编辑

我认为您需要对每一行进行复杂的操作。如果您只需要从彼此减去列:

df['A-B'] = df.A - df.B
Run Code Online (Sandbox Code Playgroud)