【发布时间】:2020-02-04 10:43:45
【问题描述】:
我有一个包含几列的 pandas 数据框,例如
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0,100,size=(100, 7)), columns=list('ABCDEFG'))
我想apply 给它一个可以接受数据框所有列作为参数的函数:
# function would do something more complex potentially :)
def foo(a,b,c,d,e,f,g):
# do stuff with a,b,c,d,e,f,g. Here I do something silly/simple
return a + b*2 + c*3 + d*4 + e*5 + f*5 + g*5
现在,我想将foo 应用于df 的所有行。这样做的正确语法是什么?
我的尝试成功了
df.apply(lambda row: foo(row[0], row[1], row[2], row[3], row[4], row[5], row[6]), axis = 1) # terrible
df.apply(lambda row: foo(*row), axis = 1) # better
但是有没有办法更简洁地做到这一点,例如没有lambda?
【问题讨论】:
-
如果您的函数中的参数与您的 col 名称匹配,您可以创建一个 dict,然后迭代它会减少代码。你也可以压缩两个迭代器,并应用函数直到迭代器结束。
-
为什么要在这里使用apply? stackoverflow.com/questions/54432583/…