我需要使用lambda函数进行逐行计算。例如,创建一些数据帧

import pandas as pd
import numpy as np

def myfunc(x, y):
    return x + y

colNames = ['A', 'B']
data = np.array([np.arange(10)]*2).T

df = pd.DataFrame(data, index=[range(0, 10)], columns=colNames)

使用“myfunc”确实有效
df['D'] = (df.apply(lambda x: myfunc(x.A, x.B), axis=1))

但第二种情况不起作用!
df['D'] = (df.apply(lambda x: myfunc(x.colNames[0], x.colNames[1]), axis=1))

给出错误
AttributeError: ("'Series' object has no attribute 'colNames'", u'occurred at index 0')

我真的需要使用第二种情况(使用列表访问colnames),它给出了一个错误,关于如何做到这一点有什么线索吗?
谢谢

最佳答案

使用df.apply()时,数据帧的每一行都将作为熊猫系列传递给lambda函数。然后,框架的列将成为系列的索引,您可以使用series[label]访问值。
所以这应该是有效的:

df['D'] = (df.apply(lambda x: myfunc(x[colNames[0]], x[colNames[1]]), axis=1))

关于python - Pandas - 使用apply()时,'Series'对象没有属性'colNames',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40506390/

10-10 05:54