gpt4 book ai didi

python - 计算所有可能行的差异

转载 作者:行者123 更新时间:2023-12-01 03:44:16 28 4
gpt4 key购买 nike

基于数据帧d的选择ds,其中:

{ 'x': d.x, 'y': d.y, 'a':d.a, 'b':d.b, 'c':d.c '行:d.n'})

n 行,x 的范围从 0n-1。需要 n 列,因为它是一个选择,并且需要保留索引以供以后查询。

如何有效计算每列(a, b, c)的每一行(例如a_0、a_1等)之间的差异而不丢失行信息(例如,带有所使用行索引的新列)?

MWE

示例选择ds:

             x           y      a     b      c     n

554.607085 400.971878 9789 4151 6837 146
512.231450 405.469524 8796 3811 6596 225
570.427284 694.369140 1608 2019 2097 291

期望的输出:

dist 欧氏距离 math.hypot(x2 - x1, y2 - y1)

da、db、dc 表示 da:np.abs(a1-a2)

ns 包含所使用行的 n 行的字符串

结果如下:

             dist          da        db       dc         ns
42.61365102824963 993 340 241 146-225
293.82347069813255 8181 2132 4740 146-291
.. .. .. .. 225-291

最佳答案

您可以使用itertools.combinations()来生成对:

先读取数据:

import pandas as pd
from io import StringIO
import numpy as np

text = """ x y a b c n
554.607085 400.971878 9789 4151 6837 146
512.231450 405.469524 8796 3811 6596 225
570.427284 694.369140 1608 2019 2097 291"""

df = pd.read_csv(StringIO(text), delim_whitespace=True)

创建索引并计算结果:

from itertools import combinations

index = np.array(list(combinations(range(df.shape[0]), 2)))

df1, df2 = [df.iloc[idx].reset_index(drop=True) for idx in index.T]

res = pd.concat([
np.hypot(df1.x - df2.x, df1.y - df2.y),
df1[["a", "b", "c"]] - df2[["a", "b", "c"]],
df1.n.astype(str) + "-" + df2.n.astype(str)
], axis=1)

res.columns = ["dist", "da", "db", "dc", "ns"]
res

输出:

         dist    da    db    dc       ns
0 42.613651 993 340 241 146-225
1 293.823471 8181 2132 4740 146-291
2 294.702805 7188 1792 4499 225-291

关于python - 计算所有可能行的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39173897/

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