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
: