在一个熊猫系列中查找两个近似值.根据条件在另一个标志上创建一个标志



我正在寻找:

1-查看一个系列(数量(的所有值

2-动态突出显示所有属于标准(在本例中为abs(1.5(数量单位(的内容,并在另一个系列(附近(中使用"标志"。

3 - 如果是 True 值,则标志应显示由空格或其他字符分隔的所有索引值

下面的数据帧显示近似序列中的所需结果。

index | quantity |      near
----------------------------------
inv1  |  2017.45 |  no
inv2  |   102.10 |  inv2 inv3 inv6
inv3  |   101.60 |  inv2 inv3 
inv5  |   200.4  |  no
inv6  |   103.39 |  inv2 inv6

有什么想法吗?提前谢谢你。

Pandas 0.21.1 和 Python 3.6.5

IIUC:

q = df.quantity.values
x = df['index']
i, j = np.where(np.abs(np.subtract.outer(q, q)) <= 1.5)
df.assign(near=x.map(x[i].groupby(x[j].values).apply(' '.join)))
index  quantity            near
0  inv1   2017.45            inv1
1  inv2    102.10  inv2 inv3 inv6
2  inv3    101.60       inv2 inv3
3  inv5    200.40            inv5
4  inv6    103.39       inv2 inv6

您可以避免对角线比较

q = df.quantity.values
x = df['index']
m = np.abs(np.subtract.outer(q, q)) <= 1.5
np.fill_diagonal(m, False)
i, j = np.where(m)
df.assign(near=x.map(x[i].groupby(x[j].values).apply(' '.join)).fillna('no'))
index  quantity       near
0  inv1   2017.45         no
1  inv2    102.10  inv3 inv6
2  inv3    101.60       inv2
3  inv5    200.40         no
4  inv6    103.39       inv2

最新更新