【发布时间】:2016-12-29 21:57:40
【问题描述】:
这篇文章涵盖了Modification of a function to return a dataframe with specified values,我想进一步修改输出。当前函数和向量化版本将得到所有列组合相互减去,并相应地返回相关数据。
示例和测试数据:
import pandas as pd
import numpy as np
from itertools import combinations
df2 = pd.DataFrame(
{'AAA' : [80,5,6],
'BBB' : [85,20,30],
'CCC' : [100,50,25],
'DDD' : [98,50,25],
'EEE' : [103,50,25],
'FFF' : [105,50,25],
'GGG' : [109,50,25]});
df2
AAA BBB CCC DDD EEE FFF GGG
0 80 85 100 98 103 105 109
1 5 20 50 50 50 50 50
2 6 30 25 25 25 25 25
v = df2.values
df3 = df2.mask((np.abs(v[:, :, None] - v[:, None]) <= 5).sum(-1) <= 1)
df3
AAA BBB CCC DDD EEE FFF GGG
0 80.0 85.0 100 98 103 105 109
1 NaN NaN 50 50 50 50 50
2 NaN 30.0 25 25 25 25 25
thresh 中的所有值(此处为 5)均以 np.abs <=5 逐行返回。
需要改变什么?
在df3 的第一行中,thresh (80,85) 和 (100,98,103,105,109) 中有两个值集群。它们都是有效的,但是是两个独立的组,不在thresh 内。我希望能够根据另一个 thresh 值来分离这些值。
我试图用下面的(有缺陷的)代码来展示我想要做什么,并且只包括这个来表明我试图自己取得进展..
df3.mask(df3.apply(lambda x : x >= df3.T.max() \
- (thresh * 3))).dropna(thresh=2).dropna(axis=1)
AAA BBB
0 80.0 85.0
df3.mask(~df3.apply(lambda x : x >= df3.T.max() - (thresh * 3))).dropna(axis=1)
CCC DDD EEE FFF GGG
0 100 98 103 105 109
1 50 50 50 50 50
2 25 25 25 25 25
所以我的输出很好(并且显示接近所需的输出)但是我得到这个的方式不是很好......
---所需的输出: ---
我已经使用了多行来演示,但是当我使用此代码时,它只会是需要输出和拆分的一行。因此,所需的输出是根据此示例为行 0 返回单独的列。
CCC DDD EEE FFF GGG
0 100 98 103 105 109
和
AAA BBB
0 80.0 85.0
【问题讨论】: