Python 如何对lambda中的多个值执行操作?

Python 如何对lambda中的多个值执行操作?,python,arrays,pandas,numpy,dataframe,Python,Arrays,Pandas,Numpy,Dataframe,我有以下数据帧: In: df AAPL IBM 2016-04-27 00:00:00+00:00 98.113 NaN 2016-04-28 00:00:00+00:00 97.288 NaN 2016-04-29 00:00:00+00:00 94

我有以下数据帧:

In: df

                                      AAPL               IBM 
2016-04-27 00:00:00+00:00            98.113                NaN   
2016-04-28 00:00:00+00:00            97.288                NaN   
2016-04-29 00:00:00+00:00            94.147            145.932   
2016-05-02 00:00:00+00:00            93.511            145.595   
2016-05-03 00:00:00+00:00            95.161            143.515   
2016-05-04 00:00:00+00:00            95.320            143.614   
2016-05-05 00:00:00+00:00            94.070            145.892   
2016-05-06 00:00:00+00:00            93.450            147.970   
2016-05-09 00:00:00+00:00            93.770            148.200   
2016-05-10 00:00:00+00:00            93.570            150.040 
我从另一个数据帧(
bar
)返回了两个最大值,它们是:

In: max_values = bar.max()
In: max_values
Out: AAPL   111.710
     IBM    151.676
我想得到值,列名,如果可能的话,还有它的索引,这些值的结果值在0.04和0.08之间。并将它们存储在新的数据帧中。我试过这个:

foo = df.apply((lambda s:(0.04 <=(1 - s.max() / max_values) <= 0.08)==True))
如何对
lambda
中的
max\u values
中的每个值执行操作

我希望输出如下:

In: foo
Out: AAPL   93.511
     IBM    145.892
#this means 93.511 and 145.892 are the values, upon which performing percentage operation,
returned value which was between 0.04 and 0.08.

元素形式的条件表达式对于级数来说有点棘手。您必须将它们放在括号中,然后逐个添加。
我感到惊讶的是,解决方案如此之短;告诉我它是否适合你的需要

ratios = abs(1 - df / max_values)
mask = (0.04 <= ratios) & (ratios <= 0.08)
solution = df[mask.all(axis=1)]
比值=abs(1-df/max_值)

掩码=(0.04您可能需要
abs(1-s.max()/max_值)
,不是吗?否则,这对python来说并不是什么新鲜事,你能详细说明一下,并用你的解决方案来表达输出是什么样子的吗?我只想要输出,正如我在问题中所解释的,你可以自由地做任何类型的操作,即使没有lambdas。最好是你尝试一下代码,看看每一步都是什么
>比率
掩码
,和
解决方案
:)我会详细解释,但是
解决方案
应该是您想要的,如果您想要两列中验证条件的行,我一定会检查,但是我对解决方案的规模感到惊讶:)并想知道解决方案是否完整,或者您是否需要对我的问题进行更多的澄清,如果需要,请随时提问;它之所以如此简短,是因为所有的操作都是在内部矢量化的(按元素、按列或按行):)这对于大多数
pandas
方法来说都是如此。太好了,明天我会尝试你的解决方案,因为这里的夜晚很黑,如果你不介意的话,我将向你发布关于对我有效与否的解决方案:)
ratios = abs(1 - df / max_values)
mask = (0.04 <= ratios) & (ratios <= 0.08)
solution = df[mask.all(axis=1)]