gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:59:19 25 4
gpt4 key购买 nike

引用下面的测试数据和我用来识别变量 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

Desired output 是一个数据框,显示 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

最佳答案

使用masksubaxis=1

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)

额外学分
我矢量化并嵌入了你的 closeCols来点 NumPy 的乐趣。
注意没有 apply

  • numpy 广播以获取列的所有组合相互减去。
  • np.abs
  • <= 5
  • sum(-1)我安排了广播使得说行的差异0 , 列 AAA所有行 0将布置在最后一个维度上。 -1sum(-1)说对最后一个维度求和。
  • <= 1所有值都小于 5 远离自己。所以我希望它们的总和大于 1。因此,我们屏蔽所有小于或等于 1 的值。

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

关于python - 修改函数以返回具有指定值的数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41353511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com