我正在尝试验证我创建的lambda函数是否正确,因此我添加了添加列(max_value,min_value,diff)以验证我的lambda函数的数值是否正确。
但是当我这样做时,我注意到在评估期间生成的lambda表达式包含了这些新列,因此diff和lambda列不正确。
b, d, e
列?代码:
import numpy as np
from pandas import DataFrame
frame = DataFrame(np.random.randn(4, 3), columns=list('bde'),
index=['Utah', 'Ohio', 'Texas', 'Oregon'])
f = lambda x: x.max() - x.min()
frame['max_value'] = np.max(frame, axis=1)
frame['min_value'] = np.min(frame, axis=1)
frame['diff'] = frame.max_value - frame.min_value
frame['lambda'] = frame.apply(f, axis=1)
frame
结果:
Out[30]:
b d e max_value min_value diff lambda
Utah 0.382063 -1.026674 -2.706572 0.382063 -2.706572 3.088636 5.795208
Ohio 1.718023 -0.446802 -0.345996 1.718023 -0.446802 2.164825 2.611627
Texas 0.809239 -0.761325 -1.253476 0.809239 -1.253476 2.062715 3.316191
Oregon -1.722270 0.438120 -0.619916 0.438120 -1.722270 2.160390 3.882659
答案 0 :(得分:0)
选择要处理的列子集非常简单。在这里,我使用与创建数据框相同的选择器,但它只是一个列名列表。
<强>代码:强>
df['lambda'] = df[list('bde')].apply(lambda x: x.max() - x.min(), axis=1)
测试代码:
import numpy as np
from pandas import DataFrame
df = DataFrame(np.random.randn(4, 3), columns=list('bde'),
index=['Utah', 'Ohio', 'Texas', 'Oregon'])
df['max_value'] = np.max(df, axis=1)
df['min_value'] = np.min(df, axis=1)
df['diff'] = df.max_value - df.min_value
df['lambda'] = df[list('bde')].apply(lambda x: x.max() - x.min(), axis=1)
print(df)
<强>结果:强>
b d e max_value min_value diff lambda
Utah -0.108325 -0.043782 -0.799588 -0.043782 -0.799588 0.755807 0.755807
Ohio 0.444546 -0.697631 1.226530 1.226530 -0.697631 1.924161 1.924161
Texas -2.024484 -1.749634 2.110496 2.110496 -2.024484 4.134980 4.134980
Oregon -0.482084 -0.604144 0.701907 0.701907 -0.604144 1.306051 1.306051
答案 1 :(得分:0)
您可以访问lambda函数中的列:
f = lambda x: x['max_value'] - x['min_value']
如果您不想使用这些列,您可以在lambda函数中执行所有操作:
frame['lambda'] = frame[['b', 'd', 'e']].apply(lambda x: x.max() - x.min(), axis=1)
这将仅将lambda函数应用于&#39;&#39;&#39; d&#39;并且&#39; e&#39;列。