如何从最近的列中获取值?

Posted

技术标签:

【中文标题】如何从最近的列中获取值?【英文标题】:how to get value from the nearest column? 【发布时间】:2021-09-01 02:31:30 【问题描述】:

训练数据集

df_table = pd.DataFrame()
df_table["A"] = [0.2, 0.2, 0.2, 0.2, 0.2,
                 0.4, 0.4, 0.4, 0.4, 0.4,
                 0.6, 0.6, 0.6, 0.6, 0.6,
                 1.5, 1.5, 1.5, 1.5, 1.5,
                 2.5, 2.5, 2.5, 2.5, 2.5,
                 3.0, 3.0, 3.0, 3.0, 3.0]

df_table[450] = [1, 5, 20, 30, 40,
                 1, 5, 8, 10, 20,
                 1, 5, 10, 15, 25,
                 2, 7, 15, 20, 30,
                 2, 7, 15, 20, 35,
                 2, 8, 20, 30, 40]

df_table[500] = [3, 15, 25, 60, 80,
                 4, 10, 15, 20, 30,
                 5, 10, 15, 30, 40,
                 5, 10, 20, 30, 45,
                 7, 10, 20, 35, 50,
                 8, 15, 25, 60, 80]

如果输入值为A = 0.2 和temperature = 476,我想从最接近476 的列中获取值,在这种情况下,值来自500,即3

同样,我如何从450500 获取这两个值。对于这种情况,13。所以这将是最近的较小列和最近的较高列的值。

【问题讨论】:

【参考方案1】:

您需要根据可用列和您的值计算要使用的正确列。

然后本地化您的数据框的第一个值,其中A 填充您的搜索值并查询您刚刚计算的列:

import pandas as pd

df_table = pd.DataFrame()
df_table["A"] = [0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, 0.4,
                 0.6, 0.6, 0.6, 0.6, 0.6, 1.5, 1.5, 1.5, 1.5, 1.5,
                 2.5, 2.5, 2.5, 2.5, 2.5, 3.0, 3.0, 3.0, 3.0, 3.0]

df_table[450] = [1, 5, 20, 30, 40, 1, 5, 8, 10, 20,
                  1, 5, 10, 15, 25, 2, 7, 15, 20, 30,
                  2, 7, 15, 20, 35, 2, 8, 20, 30, 40]

df_table[500] = [3, 15, 25, 60, 80, 4, 10, 15, 20, 30,
                  5, 10, 15, 30, 40, 5, 10, 20, 30, 45,
                  7, 10, 20, 35, 50, 8, 15, 25, 60, 80]

# integer columns harvested from the dataframe
T_values = [n for n in df_table.columns if isinstance(n,int)]

# what I want to query
myA = 0.2
myT = 476

# get the column names that are near myT
minColNear_myT = max(a for a in T_values if a <= myT)
maxColNear_myT = min(a for a in T_values if a >= myT)

# localize the first one where myA matches    
first_one_matching_myA = df_table.loc[(df_table['A'] == myA).idxmax()]

# output the values of the columns near myT
print(minColNear_myT, myT, first_one_matching_myA[minColNear_myT])
print(maxColNear_myT, myT, first_one_matching_myA[maxColNear_myT])

输出:

450 476 1.0
500 476 3.0

要仅输出更接近的列,将myT 与存在的两列进行比较,并使用差异最小的列:

closest = sorted( (k for k in T_values), key = lambda x:abs(x - myT) )[0]
print(closest,  myT, first_one_matching_myA[closest])

【讨论】:

首先感谢您花时间查看我的问题。我还有一个进一步的查询,我如何自动到达 450 和 500 列而不是对其进行硬编码。我的列不止两列,需要选择 - 和 + 最接近的列。这是可能的吗? @Bisal T_values = [n for n in df_table.columns if isinstance(n,int)] 绝对的宝石,谢谢!

以上是关于如何从最近的列中获取值?的主要内容,如果未能解决你的问题,请参考以下文章

选择最近的时间戳行并从具有 Variant DataType 的列中获取值

如何在 QT C++ 中从表的列中获取 SQL 中的所有值

Rails:如何从列中获取唯一值

如何根据条件从每列中获取唯一值?

如何将一列的列值组合到 MySQL 中的另一列中?

如何根据两个逗号分隔值的列中的任何一个值获取记录