Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 修改函数以返回具有指定值的数据帧_Python_Pandas - Fatal编程技术网

Python 修改函数以返回具有指定值的数据帧

Python 修改函数以返回具有指定值的数据帧,python,pandas,Python,Pandas,参考下面的测试数据和我用来识别彼此变量thresh中的值的函数 有人能帮我修改一下以显示我所显示的预期输出吗 测试数据 import pandas as pd import numpy as np from itertools import combinations df2 = pd.DataFrame( {'AAA' : [4,5,6,7,9,10], 'BBB' : [10,20,30,40,11,10], 'CCC' : [100,50,25

参考下面的测试数据和我用来识别彼此变量
thresh
中的值的函数

有人能帮我修改一下以显示我所显示的预期输出吗

测试数据

import pandas as pd
import numpy as np
from itertools import combinations
df2 = pd.DataFrame(
       {'AAA' : [4,5,6,7,9,10], 
        'BBB' : [10,20,30,40,11,10],
        'CCC' : [100,50,25,10,10,11],
        'DDD' : [98,50,25,10,10,11],
        'EEE' : [103,50,25,10,10,11]});
功能

thresh = 5    
def closeCols2(df):
        max_value = None
        for k1,k2 in combinations(df.keys(),2):
            if abs(df[k1] - df[k2]) < thresh:
                if max_value is None:
                    max_value = max(df[k1],df[k2])
                else:
                    max_value = max(max_value, max(df[k1],df[k2]))
        return max_value 
应用后的当前系列输出:

    AAA BBB CCC DDD EEE
0   4   10  100 98  103
1   5   20  50  50  50
2   6   30  25  25  25
3   7   40  10  10  10
4   9   11  10  10  10
5   10  10  11  11  11
df2.apply(closeCols2, axis=1)

0    103
1     50
2     25
3     10
4     11
5     11
dtype: int64
所需输出是一个数据框,显示
thresh
内的所有值,以及
nan
中不在thresh内的任何值

    AAA BBB CCC DDD EEE
0   nan nan 100 98  103
1   nan nan 50  50  50
2   nan 30  25  25  25
3   7   nan 10  10  10
4   9   11  10  10  10
5   10  10  11  11  11

使用轴=1的
mask
sub

df2.mask(df2.sub(df2.apply(closeCols2, 1), 0).abs() > thresh)

    AAA   BBB  CCC  DDD  EEE
0   NaN   NaN  100   98  103
1   NaN   NaN   50   50   50
2   NaN  30.0   25   25   25
3   7.0   NaN   10   10   10
4   9.0  11.0   10   10   10
5  10.0  10.0   11   11   11

注意:
我重新定义了
closeCols
,将
thresh
作为一个参数。然后您可以在
apply
调用中传递它

def closeCols2(df, thresh):
        max_value = None
        for k1,k2 in combinations(df.keys(),2):
            if abs(df[k1] - df[k2]) < thresh:
                if max_value is None:
                    max_value = max(df[k1],df[k2])
                else:
                    max_value = max(max_value, max(df[k1],df[k2]))
        return max_value 

df2.apply(closeCols2, 1, thresh=5)

当我看到这样的答案时,我意识到我有很多东西要学。。。非常感谢@阿黛尔,我已经更新了我的答案。你可能会发现新的信息很有用。然而,这可能也很难理解。再次感谢这是伟大的!我也在看你的“路径依赖切片”代码。在我花太多时间试图了解您所做的工作之前,您认为它对利润目标分析财务数据可能有用吗?i、 e.是否可以用它来判断一个简单的交易策略是否首先达到了止损或利润目标?简短回答。。。对很好地创建了一个新的轴和广播,以获得所有的组合。
v = df2.values
df2.mask((np.abs(v[:, :, None] - v[:, None]) <= 5).sum(-1) <= 1)

    AAA   BBB  CCC  DDD  EEE
0   NaN   NaN  100   98  103
1   NaN   NaN   50   50   50
2   NaN  30.0   25   25   25
3   7.0   NaN   10   10   10
4   9.0  11.0   10   10   10
5  10.0  10.0   11   11   11