在一个系列中找出两个近似值。基于一个标准在另一个上创建一个标志

2024-05-28 20:25:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望:

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

2-使用另一系列(近)中的“标志”动态高亮显示属于某个标准(本例中为abs(1.5)数量单位)的所有内容。你知道吗

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

下面的数据框显示了近系列中所需的结果。你知道吗

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


Tags: no内容标准数量标志单位动态abs
1条回答
网友
1楼 · 发布于 2024-05-28 20:25:58

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

相关问题 更多 >

    热门问题