繁体   English   中英

如何将.apply()lambda函数设置为DataFrame中的受限列集

[英]How to .apply() lambda function to restricted column set in DataFrame

我试图验证我创建的lambda函数是否正确,所以我添加了添加列(max_value,min_value,diff)来验证我的lambda函数的数值是否正确。

但是当我这样做时,我注意到在评估期间生成的lambda表达式包含了这些新列,因此diff和lambda列不正确。

  • 如何将.apply()函数限制为b, d, e列?
  • 或者,是否可以限制lambda函数? (不确定这是否合乎逻辑)

码:

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

选择要处理的列子集非常简单。 在这里,我使用与创建数据框相同的选择器,但它只是一个列名列表。

码:

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

您可以访问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函数应用于'b','d'和'e'列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM