测试数据:
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' : [100,50,25,10,10,11]});
thresh = 10
我的功能:
def closeCols2(df):
for k1,k2 in combinations(df.keys(),2):
if abs(df[k1] - df[k2]) < thresh:
return max(df[k1],df[k2])
这给了我以下输出,如果两列在thresh中,则显示行的最大值:
df2.apply(closeCols2, axis=1)
0 10
1 50
2 30
3 10
4 11
5 10
dtype: int64
但第1行的DDD
列(100)和CCC
(100)也有thresh
范围内的值,而且这些值未被评估。如何修改我的功能以捕获它?
答案 0 :(得分:1)
在代码中,函数在找到小于定义的thresh
的绝对差值时立即返回。因此第一次在第一行中满足条件的列#AAA;#39; (4)和&#39; BBB&#39; (10)它返回值(10)并停止执行,甚至不评估下一列。我不确切地知道你想做什么,但你可能会尝试像这样调整你的功能。
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 of the max
max_value = max(max_value, max(df[k1],df[k2]))
return max_value
df2.apply(closeCols2, axis=1)
# 0 100
# 1 50
# 2 30
# 3 10
# 4 11
# 5 11