Python 将函数应用于多个列和额外整数参数

Python 将函数应用于多个列和额外整数参数,python,pandas,apply,Python,Pandas,Apply,假设数据帧为: import pandas as pd df = pd.DataFrame({'col1':[1,2,3,4,5,6],'col2':[11,22,33,44,55,66],'col3':[11,222,333,444,555,666]}) 还有一个函数,比如: def sumit (a,b, name='me', password='pass'): # pseudocode: open database with name 'me' and password 'pass'

假设数据帧为:

import pandas as pd
df = pd.DataFrame({'col1':[1,2,3,4,5,6],'col2':[11,22,33,44,55,66],'col3':[11,222,333,444,555,666]})
还有一个函数,比如:

def sumit (a,b, name='me', password='pass'):
  # pseudocode: open database with name 'me' and password 'pass' 
  # make queries and get c
  c= 4
  return a+b+c
我如何创建一个额外的列“colSUM”来应用列col1和col2的加法,以及df中传递的值c,以及作为变量的名称和密码

我无法从以下方面来理解:
(应用矢量化逻辑) 或:

请注意,名称和密码不能矢量化,否则与数据库的连接将无法工作

在使用for循环之前,我决定在这里试一试

我认为可行的代码是:

df['new'] = df[['col1','col2']].apply(sumit, kwargs=(name='me', password='pass'))
nor this:
df['new'] = df[['col1','col2']].apply(sumit, name='me', password='pass')
nor:
df['new'] = df.apply(sumit, df['col1'], df['col2'], name='me', password='pass')
有什么想法吗? 谢谢

试试:

def sumit (x, name='me', password='pass'):
    c= 4
    return x['col1']+x['col2']+c

df['new'] = df[['col1','col2']].apply(sumit, name='me', password='pass', axis=1)
输出:

   col1  col2  col3  new
0     1    11    11   16
1     2    22   222   28
2     3    33   333   40
3     4    44   444   52
4     5    55   555   64
5     6    66   666   76
   col1  col2  col3  new
0     1    11    11   16
1     2    22   222   28
2     3    33   333   40
3     4    44   444   52
4     5    55   555   64
5     6    66   666   76
尝试:

输出:

   col1  col2  col3  new
0     1    11    11   16
1     2    22   222   28
2     3    33   333   40
3     4    44   444   52
4     5    55   555   64
5     6    66   666   76
   col1  col2  col3  new
0     1    11    11   16
1     2    22   222   28
2     3    33   333   40
3     4    44   444   52
4     5    55   555   64
5     6    66   666   76

主要问题是函数
apply
使用将整个
系列
作为一个参数进行传递

而不是
sumit(a,b,…)
它应该是
sumit(s,…
,其中
s
系列

然后在函数中解包该系列:

a, b = s

其次,它似乎是一个行计算,因此使用
axis=1
而不是
apply
的默认值
axis=0

import pandas as pd

df = pd.DataFrame({
    'col1': [1, 2, 3, 4, 5, 6],
    'col2': [11, 22, 33, 44, 55, 66],
    'col3': [11, 222, 333, 444, 555, 666]
})


def sumit(s, name='me', password='pass'):
    a, b = s
    c = 4
    return a + b + c


df['new'] = df[['col1', 'col2']].apply(sumit, name='me', password='pass', axis=1)

print(df)
df


主要问题是函数
apply
使用将整个
系列
作为一个参数进行传递

而不是
sumit(a,b,…)
它应该是
sumit(s,…
,其中
s
系列

然后在函数中解包该系列:

a, b = s

其次,它似乎是一个行计算,因此使用
axis=1
而不是
apply
的默认值
axis=0

import pandas as pd

df = pd.DataFrame({
    'col1': [1, 2, 3, 4, 5, 6],
    'col2': [11, 22, 33, 44, 55, 66],
    'col3': [11, 222, 333, 444, 555, 666]
})


def sumit(s, name='me', password='pass'):
    a, b = s
    c = 4
    return a + b + c


df['new'] = df[['col1', 'col2']].apply(sumit, name='me', password='pass', axis=1)

print(df)
df