Хорошего пути нет в общем . Однако, если имена ваших столбцов горят точно , вы можете обернуть функцию в другую функцию, которая разбивает аргумент строки в вашей функции, потому что Series
объекты являются отображениями!
Так дано:
>>> import pandas as pd
>>> df = pd.DataFrame({'A':[1,2,3],
... 'B':[1,2,3],
... 'C':[1,2,3],
... 'D':[1,2,3]})
>>> df
A B C D
0 1 1 1 1
1 2 2 2 2
2 3 3 3 3
>>> def f(A, B, C): return A + B + C
...
Мы могли бы почти сделать:
>>> df.apply(lambda row: f(**row), axis=1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/juan/anaconda3/envs/ecqm-catalog/lib/python3.7/site-packages/pandas/core/frame.py", line 6014, in apply
return op.get_result()
File "/Users/juan/anaconda3/envs/ecqm-catalog/lib/python3.7/site-packages/pandas/core/apply.py", line 142, in get_result
return self.apply_standard()
File "/Users/juan/anaconda3/envs/ecqm-catalog/lib/python3.7/site-packages/pandas/core/apply.py", line 248, in apply_standard
self.apply_series_generator()
File "/Users/juan/anaconda3/envs/ecqm-catalog/lib/python3.7/site-packages/pandas/core/apply.py", line 277, in apply_series_generator
results[i] = self.f(v)
File "<stdin>", line 1, in <lambda>
TypeError: ("f() got an unexpected keyword argument 'D'", 'occurred at index 0')
Если вы знаете, какие столбцы вам нужны, вы можете выбрать / отпустить, чтобы получить правильный ряд:
>>> df.drop('D',axis=1).apply(lambda row: f(**row), axis=1)
0 3
1 6
2 9